且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2023-01-16 09:15:20

您可以使用 serializers.SerializerMethodField:

这是模型 Park,它有 name 和alternate_name 字段.

Here is the model Park, which has name and alternate_name fields.

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.

Here is Serializer for Park Model, ParkSerializer. This changes the name of alternate_name to 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.CharFieldsource 属性一起使用:

Additionally, you can use serializers.CharField with source attribute:

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

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

Django 用于遍历外键的 __ 符号也有效:

Django's __ notation to traverse foreign key also works:

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

如果您想更改 API 上的返回类型,同样的原则适用,因此您也可以使用 serializers.DecimalField(source=...) 和其他字段类型.

The same principle applies if you want to change the return type on the API, so you can do serializers.DecimalField(source=...) and other field types as well.

然而,这仅适用于只读字段.

This would however work only for read only fields.