Django 检查generics.RetrieveDestroyAPIView中模型中的字段
我正在编写一个RESTAPI。我的看法是: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' 这就是它的模型:
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)