我有清单[1、2、3] 和TestModel queryset
[ {'pk':1,'text':'one'}, {'pk':2,'text':'two'}, {'pk':3,'text':'three'}]
我有如下的模型和序列化器
class TestMode(models.Model):
text = models.CharField(max_length=10)
class TestModelSerializer(serializer.ModelSerializer):
class Meta:
model = TestModel
fields = ('pk', 'text')
我想像这样
[{'pk':1, 'text':'one', 'number':1}, {..., 'number':2}, {..., 'number':3}]
我制作了另一个序列化器
class WrapperSerializer(serializer.ModelSerializer):
number = serializer.IntegerField()
class Meta:
model = TestModel
fields = ('pk', 'text')
我想喜欢以下内容,但我认为这并不酷
serialized_data = TestModelSerializer(qs, many=True).data
for index, data in enumerate(serializerd_data):
data['number'] = list[index]
serializer = WrapperSerializer(serialized_data, many=True)
我该怎么做???我没有其他主意...请帮助我
答案 0 :(得分:0)
如果要将计算值(只读)添加到序列化程序,则有两个选择:
在模型上,定义一个@property
number
:
@property
def number(self):
return self.friends.count() # or whatever you need to calculate the number
然后在序列化程序中,您可以仅将number
用作任何其他字段,但需要指定序列化程序的类型(例如IntegerField
)。
在串行器上使用here中所述的SerializerMethodField
:
number = serializers.SerializerMethodField()
def get_number(self, obj):
return obj.friends.count()