I'm new in Django Rest framework. I'm trying to do some test task (simple RestAPI service) but it failed.
I've created model Order
, serializer OrderSerializer(HyperlinkedModelSerializer)
, and OrderViewSet(ModelViewSet)
. (nothing special, use code from tutorial).
I tested GET/POST and it works good.
But PATCH request works strange. I do PATCH with different fields in payload (which don't exist in the model) and there is no error in response, response code is 200 always.
models.py
class EOrderStatus(Enum):
Unknown = 0
Created = 1
Paid = 2
Failed = 3
class Order(models.Model):
_status = models.SmallIntegerField(default=EOrderStatus.Created.value)
create_date = models.DateTimeField(default=now, editable=False)
pay_date = models.DateTimeField(blank=True, null=True)
description = models.CharField(max_length=50, blank=True)
serializers.py
class OrderSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Order
fields = ['id', '_status', 'create_date', 'pay_date', 'description']
views.py
class OrderViewSet(viewsets.ModelViewSet):
queryset = Order.objects.all()
serializer_class = OrderSerializer
PATCH /api/orders/1, status code 200
{
"dessssss": "aaa",
"statttttt": "11"
}
My question is: why status code is 200? I supposed that I must to receive error something like "invalid fields ...". Do I need to write patch-validator for each model/serializer
?
And 2nd question: model Order contains enum-field _status
. What is the best way don't use _status
in request/response, but use property status
instead? (string type, EOrderStatus.Created.name
)