views.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. from rest_framework import viewsets, status
  2. from rest_framework.parsers import MultiPartParser, FormParser
  3. from rest_framework.permissions import IsAuthenticated, IsAdminUser
  4. from rest_framework.response import Response
  5. from django_filters.rest_framework import DjangoFilterBackend
  6. from rest_framework.filters import OrderingFilter, SearchFilter
  7. from utils.page import MyPageNumberPagination
  8. from .models import InvoiceHeader, InvoiceRecord
  9. from .serializers import InvoiceHeaderGetSerializer, InvoiceHeaderPostSerializer
  10. from .serializers import InvoiceHeaderPatchSerializer, InvoiceHeaderDeleteSerializer, InvoiceRecordGetSerializer, InvoiceRecordPostSerializer, InvoiceRecordPatchSerializer, InvoiceRecordDeleteSerializer
  11. from .filter import InvoiceHeaderFilter, InvoiceRecordFilter
  12. class InvoiceHeaderViewSet(viewsets.ModelViewSet):
  13. """
  14. 发票头视图集
  15. retrieve:
  16. Response a data list (get)
  17. list:
  18. Response a data list (all)
  19. create:
  20. Create a data line (post)
  21. delete:
  22. Delete a data line (delete)
  23. partial_update:
  24. Partial_update a data (patch:partial_update)
  25. update:
  26. Update a data (put:update)
  27. """
  28. fliter_backends = (DjangoFilterBackend, OrderingFilter)
  29. ordering_fields = ('create_time', 'update_time')
  30. filterset_class = InvoiceHeaderFilter
  31. pagination_class = MyPageNumberPagination
  32. def get_project(self):
  33. try:
  34. id = self.kwargs.get('pk')
  35. return id
  36. except:
  37. return None
  38. def get_queryset(self):
  39. project_id = self.get_project()
  40. if project_id:
  41. return InvoiceHeader.objects.filter(id=project_id,is_delete=False)
  42. else:
  43. return InvoiceHeader.objects.filter(is_delete=False)
  44. def get_serializer_class(self):
  45. if self.action in ['list','retrieve']:
  46. return InvoiceHeaderGetSerializer
  47. elif self.action in ['create', 'update', 'partial_update']:
  48. return InvoiceHeaderPostSerializer
  49. else:
  50. return InvoiceHeaderGetSerializer
  51. def create(self, request, *args, **kwargs):
  52. serializer = self.get_serializer(data=request.data)
  53. serializer.is_valid(raise_exception=True)
  54. serializer.save()
  55. headers = self.get_success_headers(serializer.data)
  56. return Response(serializer.data, status=status.HTTP_200_OK, headers=headers)
  57. def update(self, request, *args, **kwargs):
  58. qs = self.get_object()
  59. serializer = self.get_serializer(qs, data=request.data, partial=True)
  60. serializer.is_valid(raise_exception=True)
  61. serializer.save()
  62. headers = self.get_success_headers(serializer.data)
  63. return Response(serializer.data, status=status.HTTP_200_OK, headers=headers)
  64. def partial_update(self, request, *args, **kwargs):
  65. return super().partial_update(request, *args, **kwargs)