Django 检查generics.RetrieveDestroyAPIView中模型中的字段

Django 检查generics.RetrieveDestroyAPIView中模型中的字段,django,rest,django-rest-framework,Django,Rest,Django Rest Framework,我正在编写一个RESTAPI。我的看法是: class OrderDeleteAPIView(generics.RetrieveDestroyAPIView): queryset = Order.objects.all() serializer_class = OrderDeleteSerializer # permission_classes = (OwnerCanManageOrReadOnly,) lookup_field = 'id' 这就是它的模型:

我正在编写一个RESTAPI。我的看法是:

class OrderDeleteAPIView(generics.RetrieveDestroyAPIView):
    queryset = Order.objects.all()
    serializer_class = OrderDeleteSerializer
    # permission_classes = (OwnerCanManageOrReadOnly,)
    lookup_field = 'id'
这就是它的模型:

class Order(models.Model):
    product = models.ForeignKey(Product)
    customer = models.ForeignKey(Customer, null=True)WAITING = 'WA'
    PREPARATION = 'PR'
    READY = 'RD'
    DELIVERED = 'DV'
    STATUS_CHOICES = (
        (WAITING, 'waiting'),
        (PREPARATION, 'preparation'),
        (READY, 'ready'),
        (DELIVERED, 'delivered'),
        )
    status = models.CharField(
      max_length=2,
      choices=STATUS_CHOICES,
      default=WAITING,
    ) 
以及:

这是它的序列化程序:

class OrderDeleteSerializer(ModelSerializer):
    class Meta:
        model = Order
        fields = '__all__'

如果我希望仅当状态字段为“等待”时才能删除对象(订单),该怎么办?

您可以在
销毁中执行一些检查,并在不满足约束的情况下返回错误消息作为响应:

类OrderDeleteAPIView(泛型。检索的EstroyaPiView):
queryset=Order.objects.all()
serializer\u class=OrderDeleteSerializer
#权限\类=(OwnerCanManagerReadOnly,)
查找\u字段='id'
def销毁(自我、请求、*args、**kwargs):
instance=self.get\u对象()
如果instance.status!=订单.等待:
返回JsonResponse(
状态=412,
数据={'status':'false',
'消息':'状态应为等待'}
)
super(OrderDeleteAPIView,self).destroy(请求,*args,**kwargs)

当然,您可以返回任何类型的答案(本身不是JSON响应,状态也不必是412)。通常HTTP状态代码412表示。

请下次在发布前检查缩进。
class OrderDeleteSerializer(ModelSerializer):
    class Meta:
        model = Order
        fields = '__all__'
class OrderDeleteAPIView(generics.RetrieveDestroyAPIView):
    queryset = Order.objects.all()
    serializer_class = OrderDeleteSerializer
    # permission_classes = (OwnerCanManageOrReadOnly,)
    lookup_field = 'id'

     def destroy(self, request, *args, **kwargs):
        instance = self.get_object()
        if instance.status != Order.WAITING:
            return JsonResponse(
                status=412,
                data={'status':'false',
                      'message': 'status should be WAITING'}
            )
        super(OrderDeleteAPIView, self).destroy(request, *args, **kwargs)