Пишу API для отдыха. это мой взгляд:
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 Customer(models.Model):
name = models.CharField(max_length=40)
customer_email = models.EmailField()
def __str__(self):
return self.name
и это его сериализатор:
class OrderDeleteSerializer(ModelSerializer):
class Meta:
model = Order
fields = '__all__'
Что мне делать, если я хочу, чтобы объект (заказ) можно было удалить, только когда в поле статуса указано «ожидает»?





Вы можете реализовать некоторые проверки в destroy и вернуть сообщение об ошибке в качестве ответа, если соблюдены ограничения нет:
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)Конечно, вы можете вернуть любой ответ (не как таковой ответ JSON, и статус не должен быть 412). Обычно код состояния HTTP 412 означает, что 412 Привязка не удалась.
Пожалуйста, в следующий раз проверьте отступ перед публикацией.