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

我正在尝试像SQL中的别名一样更改DRF序列化器中的“模型”字段名称。我尝试了不同的方法,但无法成功。

models.py

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

def alias_alternate_name(self):

return self.alternate_name

serializers.py

class ParkSerializer(serializers.ModelSerializer):

location = serializers.Field(source='alias_alternate_name')

#location = serializers.SerializerMethodField(source='alias_alternate_name')

#alternate_name as location

class Meta:

model = Park

fields = ('id', 'name', 'location')

我也曾尝试在Django Queryset中添加别名,但无法更改。

更新

这是我面临的例外

/ ViewName /’模块’对象上的AttributeError没有属性’Field’

我怎样才能做到这一点?

回答:

你可以使用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=...)其他字段类型。

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

以上是 如何在Django REST Framework中更改字段名称 的全部内容, 来源链接: utcz.com/qa/431840.html

回到顶部