我试图在DRF Serializer中更改模型字段名称,如SQL中的别名 . 我尝试了不同的方法,但不能成功 .
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中添加别名但无法更改 .
Updated
这是我面临的例外
/ ViewName /'module'对象的AttributeError没有属性'Field'
我怎样才能做到这一点?
谢谢
3 回答
你可以使用
serializers.SerializerMethodField
:Here is the model Park,具有name和alternate_name字段 .
Here is Serializer 适用于Park Model,ParkSerializer . 这会将alternate_name的名称更改为location .
然而,这仅适用于只读字段 .
串行器字段和序列化器中有一个非常好的功能,通常称为“源”,您可以在其中指定模型字段中的数据源 .
其中serializers.SomeSerializerField可以是serializers.CharField,如模型所示,但也可以是任何其他字段 . 你也可以把关系字段和其他序列化器放在一起,这仍然可以像魅力一样工作 . 即使alternate_name是另一个模型的foreignkey字段 .
这也适用于创建,删除和修改请求类型 . 它有效地在序列化器中创建字段名称的一对一映射,并在模型中创建字段名称 .
这也适用于写操作