from rest_framework import viewsets, status from rest_framework.parsers import MultiPartParser, FormParser from rest_framework.permissions import IsAuthenticated, IsAdminUser from rest_framework.response import Response from django_filters.rest_framework import DjangoFilterBackend from rest_framework.filters import OrderingFilter, SearchFilter from utils.page import MyPageNumberPagination from .models import InvoiceHeader, InvoiceRecord from .serializers import InvoiceHeaderGetSerializer, InvoiceHeaderPostSerializer from .serializers import InvoiceHeaderPatchSerializer, InvoiceHeaderDeleteSerializer, InvoiceRecordGetSerializer, InvoiceRecordPostSerializer, InvoiceRecordPatchSerializer, InvoiceRecordDeleteSerializer from .filter import InvoiceHeaderFilter, InvoiceRecordFilter class InvoiceHeaderViewSet(viewsets.ModelViewSet): """ 发票头视图集 retrieve: Response a data list (get) list: Response a data list (all) create: Create a data line (post) delete: Delete a data line (delete) partial_update: Partial_update a data (patch:partial_update) update: Update a data (put:update) """ fliter_backends = (DjangoFilterBackend, OrderingFilter) ordering_fields = ('create_time', 'update_time') filterset_class = InvoiceHeaderFilter pagination_class = MyPageNumberPagination def get_project(self): try: id = self.kwargs.get('pk') return id except: return None def get_queryset(self): project_id = self.get_project() if project_id: return InvoiceHeader.objects.filter(id=project_id,is_delete=False) else: return InvoiceHeader.objects.filter(is_delete=False) def get_serializer_class(self): if self.action in ['list','retrieve']: return InvoiceHeaderGetSerializer elif self.action in ['create', 'update', 'partial_update']: return InvoiceHeaderPostSerializer else: return InvoiceHeaderGetSerializer def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) serializer.save() headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=status.HTTP_200_OK, headers=headers) def update(self, request, *args, **kwargs): qs = self.get_object() serializer = self.get_serializer(qs, data=request.data, partial=True) serializer.is_valid(raise_exception=True) serializer.save() headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=status.HTTP_200_OK, headers=headers) def partial_update(self, request, *args, **kwargs): return super().partial_update(request, *args, **kwargs)