diff --git a/store/serializers.py b/store/serializers.py index bd32607..9d34ed8 100644 --- a/store/serializers.py +++ b/store/serializers.py @@ -145,11 +145,19 @@ class ChecklistSerializer(serializers.ModelSerializer): self._create_main_images(instance, images.get('main_images')) self._create_payment_proofs(instance, images.get('payment_proof')) + + # Perform update instance: Checklist = super().update(instance, validated_data) # Invalidate prefetched images delattr(instance, '_images') + if instance.status == Checklist.Status.NEW: + has_payment_info = instance.payment_proof.exists() and instance.payment_method is not None + if has_payment_info: + instance.status = Checklist.Status.PAYMENT + instance.save() + return instance @staticmethod diff --git a/store/views.py b/store/views.py index 6f80322..bdfd1f2 100644 --- a/store/views.py +++ b/store/views.py @@ -64,7 +64,11 @@ class LoginAPI(generics.GenericAPIView): return Response(UserSerializer(user).data) -class ChecklistAPI(mixins.ListModelMixin, mixins.CreateModelMixin, mixins.RetrieveModelMixin, DisablePermissionsMixin): +class ChecklistAPI(mixins.ListModelMixin, + mixins.CreateModelMixin, + mixins.RetrieveModelMixin, + mixins.UpdateModelMixin, + DisablePermissionsMixin): serializer_class = ChecklistSerializer lookup_field = 'id' filterset_fields = ['status', ] @@ -115,14 +119,11 @@ class ChecklistAPI(mixins.ListModelMixin, mixins.CreateModelMixin, mixins.Retrie return self.list(request, *args, **kwargs) - def patch(self, request, *args, **kwargs): - data = json.loads(request.body) - instance = get_object_or_404(self.get_queryset(), id=self.kwargs['id']) - serializer = self.get_serializer(instance, data=data, partial=True) - serializer.is_valid(raise_exception=True) + def perform_update(self, serializer): serializer.save() - return Response(serializer.data) + def patch(self, request, *args, **kwargs): + return self.partial_update(request, *args, **kwargs) class YuanRateAPI(generics.GenericAPIView):