您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在Django REST Framework中更改字段名称

如何在Django REST Framework中更改字段名称

你可以使用serializers.SerializerMethodField

这是 Park 模型,其中包含name和Alternative_name字段。

class Park(models.Model):
    name = models.CharField(max_length=256)
    alternate_name = models.CharField(max_length=256, blank=True)
    objects = models.GeoManager()

    class Meta:
        db_table = u'p_park'

    def __unicode__(self):
        return '%s' % self.name

这是 Park模型的序列化器,ParkSerializer。这会将alternate_name的名称更改为location。

class ParkSerializer(serializers.ModelSerializer):
    location = serializers.SerializerMethodField('get_alternate_name')

    class Meta:
        model = Park
        fields = ('other_fields', 'location')

    def get_alternate_name(self, obj):
        return obj.alternate_name

此外,你可以使用serializers.CharFieldwith source属性

class ParkSerializer(serializers.ModelSerializer):
    location = serializers.CharField(source='other_fields')

    class Meta:
        model = Park
        fields = ('other_fields', 'location')

Django__遍历外键的符号也可以使用:

location = serializers.CharField(source='OtherModel__other_fields')

如果要更改API的返回类型,则适用相同的原理,因此也可以执行serializers.DecimalField(source=...)其他字段类型。

但是,这仅适用于只读字段。

序列化程序字段中有一个非常好的功能,而序列化程序通常称为“源”,你可以在其中指定来自模型字段的数据源。

class ParkSerializer(serializers.ModelSerializer):
    location = serializers.someSerializerField(source='alternate_name')

    class Meta:
        model = Park
        fields = ('other_fields', 'location')

如模型所建议的,其中serializers.someSerializerField可以是serializers.CharField,但也可以由其他任何字段组成。你也可以放置关系字段和其他序列化器,这仍然可以像魅力一样工作。即,即使alternate_name是另一个模型的外键字段。

class ParkSerializer(serializers.ModelSerializer):
    locations = AlternateNameSerializer(source='alternate_name', many=true)

    class Meta:
        model = Park
        fields = ('other_fields', 'locations')

class AlternateNameSerializer(serializers.ModelSerialzer):
    class Meta:
        model = SomeModel

这也适用于请求的创建,删除修改类型。它有效地创建了序列化器中字段名称和模型中字段名称的一对一映射。

Go 2022/1/1 18:24:16 有391人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶