Как вернуть неполные ошибки тела в django?
class OrderViewSet(viewsets.ViewSet):
def list(self, request):
orders = Order.objects.all()
return Response({
"code": "success",
"orders": orders,
})
def create(self, request):
comment = request.data["comment"]
product_id = request.data["product_id"]
order = Order(comment=comment, product_id=product_id)
order.save()
return Response({
"code": "success",
})
Я хотел бы возвращать ошибку, если product_id не предоставлен пользователем в теле запроса:
"code": "invalid-request",
"details": {
"product_id": {
"type": "required",
"message": "Product id is required",
}
}
Кроме того, есть KeyError, если комментарий не указан, но я не хочу делать комментарий обязательным в теле запроса. Как мне установить его в '', если он не был предоставлен & и при этом вернуть успех? Спасибо
Вам следует использовать serializers для реализации как валидации входных данных, так и сохранения модели. Обратите внимание, что в примере ниже используется общий serializers.Serializer
, но вы, вероятно, захотите использовать serializers.ModelSerializer для валидации Order
данных, поскольку он также будет обрабатывать создание модели.
class OrderSerializer(serializers.Serializer):
product_id = serializers.IntegerField()
comment = serializers.CharField(required=False, default='')
class OrderViewSet(viewsets.ViewSet):
def list(self, request):
orders = Order.objects.all()
return Response({
"code": "success",
"orders": orders,
})
def create(self, request):
serializer = OrderSerializer(data=request.data)
if serializer.is_valid():
order = Order(**serializer.validated_data)
order.save()
return Response({
"code": "success",
})
return Response({
"code": "invalid-request",
"details": {
error: {
"type": serializer.errors[error][0].code,
"message": serializer.errors[error][0]
} for error in serializer.errors}
}, status=400)