Django Rest Framework Serializer charfield在给定源时不更新

时间:2017-04-17 10:23:03

标签: django django-rest-framework django-serializer

我有一个带有选择字段的模型字段

class Vehicle(models.Model):
    name = models.CharField(max_length=100)

    STATUS_CHOICES = (
        ("N", "New"),
        ("U", "Used"),
        ("P", "Just Purchased")
    )
    status = models.CharField(max_length=3, choices=STATUS_CHOICES)

序列化程序类也有状态字段,但source参数显示可读值

class VehicleSerializer(ModelSerializer):
    status = serializers.CharField(source='get_status_display')

    class Meta:
        model = Vehicle

当我尝试通过数据{'status': "U"}的补丁请求更新车辆时,没有执行更新。 但是,当我从序列化程序状态字段中删除source时,会发生更新。 提供源是在Web视图中显示正确值所必需的。

我知道可以选择将序列化程序中的状态名称更改为其他名称并在模板中使用该名称。还有一个选项可以覆盖序列化程序中的更新方法,但我的问题是源代码正在做什么来阻止更新?

1 个答案:

答案 0 :(得分:1)

我认为你需要在meta中的字段列表中添加状态。

class VehicleSerializer(ModelSerializer):
     status = serializers.CharField(source='get_status_display')

     class Meta:
         model = Vehicle
         fields = ('status',)