【发布时间】:2015-08-14 21:00:20
【问题描述】:
是否可以在模型序列化程序中包含静态字段?例如,我有一个模型:
class Location(models.Model):
long = models.FloatField(...)
lat = models.FloatField(...)
和一个序列化器:
class LocationSerialiser(serializers.ModelSerializer):
class Meta:
model = Location
fields = ("id", "long", "lat")
用一个简单的ListAPIView 我可以看到我所有的位置:
{
'id': 1,
'long': ...,
'lat': ...,
},
...
但是说我想在我的 json 响应中的所有对象中添加一个静态的非模型字段?类似的东西:
{
'id': 1,
'long': ...,
'lat': ...,
'display': True,
'icon': 'image/marker.png'
},
...
如何将这些添加到序列化程序中?我查看了fields 模块(适用于 2.2.4),但我没有看到任何明确的方法来实现这一点。一切都需要source 属性。
理想情况下我想这样做
class LocationSerialiser(serializers.ModelSerializer):
display = fields.BooleanField(value=True)
icon = fields.CharField(value="image/marker.png")
class Meta:
model = Location
fields = ("id", "long", "lat")
编辑
我发现的一种方法是简单地将额外的 @property 包装方法放在模型实例上:
class Location(models.Model):
long = models.FloatField(...)
lat = models.FloatField(...)
@property
def show(self):
return True
...
然后在序列化器中:
class LocationSerialiser(serializers.ModelSerializer):
display = fields.BooleanField(value=True)
icon = fields.CharField(value="image/marker.png")
show = fields.CharField(source="show")
class Meta:
model = Location
fields = ("id", "long", "lat")
但这似乎很hacky。必须有一种更清洁的方法来实现这一目标吗?
【问题讨论】:
标签: django django-rest-framework