Django rest framework 使用选项序列化整型字段的选项文本

Django rest framework 使用选项序列化整型字段的选项文本,django-rest-framework,Django Rest Framework,我想序列化一个有很多选择的模型,比如: class House(models.Model): ACCESSIBILITY_CHOICES = ( (ACCESSIBILITY_FULL, 'Full'), (ACCESSIBILITY_PARTIAL, 'Partial'), (ACCESSIBILITY_NONE, 'None') ) accessibility = models.IntegerField(max_length=1, choices=ACCESSIBI

我想序列化一个有很多选择的模型,比如:

class House(models.Model):
ACCESSIBILITY_CHOICES = (
    (ACCESSIBILITY_FULL, 'Full'),
    (ACCESSIBILITY_PARTIAL, 'Partial'),
    (ACCESSIBILITY_NONE, 'None')
)

accessibility = models.IntegerField(max_length=1, choices=ACCESSIBILITY_CHOICES, null=True)
我喜欢默认序列化程序,例如:

class HouseView(generics.ListCreateAPIView):
    model = House
    serializer_class = HouseSerializer

class HouseSerializer(serializers.ModelSerializer):

    class Meta:
        model = House
如果我只需要整数值,效果非常好

{accessibility:1}
然而,我想要的

{accessibility:'Full'}
非常感谢您的帮助。
非常感谢。

使用原始值设置序列化程序字段中的选项,如

ACCESSIBILITY_CHOICES = (
    ('Full', 'Full'),
    ('Partial', 'Partial'),
    ('None', 'None')
)
然后看一下重写“to_native”方法,以便将字符串值转换为其等效整数

这将为您提供一个使用字符串表示的外部API,但提供一个使用整数表示的后端

更新2019:DRF现在使用不同的方法名称从内部转换为内部,请参阅。将它们命名为:
to_representation
to_internal_value
,而不是
to/from_native

,您可以获得一个只读序列化器字段,该字段具有模型字段的详细值,并通过该方法进行选择。在字段上设置选项时,会自动添加此方法。可以将该方法设置为字符字段的源

对于也支持写入数据的端点,我建议添加“normal”字段和另一个扩展名为
\u name
的只读字段

在您的示例中,以下内容应该会生成您要查找的输出。
accessibility\u name
是只读的,而
accessibility
允许写入/更新值

class HouseSerializer(serializers.ModelSerializer):

    accessibility_name = serializers.CharField(source='get_accessibility_display')

    class Meta:
        model = House
        fields = ('accessibility', 'accessibility_name', )

好的,酷。谢谢你看这个。很好,我查过了,没有比这更具声明性的方法来覆盖到本机。