Django Rest Framework Serializer charfield 在提供源时不会更新

Raj*_*bit 5 django django-serializer django-rest-framework

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

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)
Run Code Online (Sandbox Code Playgroud)

序列化器类也有用于状态的字符字段,但带有source显示可读值的参数

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

    class Meta:
        model = Vehicle
Run Code Online (Sandbox Code Playgroud)

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

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

hsp*_*her 1

我认为您需要将状态添加到元中的字段列表中。

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

     class Meta:
         model = Vehicle
         fields = ('status',)
Run Code Online (Sandbox Code Playgroud)