Django rest_framework / validate PATCH request

406 Views Asked by At

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)

0

There are 0 best solutions below