我对使用Django和Django Rest Framework还是比较陌生,但这是我正在尝试做的事情。
我有两个模型:
class Parent(models.Model):
name = models.CharField()
class Child(models.Model):
parent = models.ForeignKey(Parent)
name = models.CharField()
age = models.IntegerField()
class Meta:
unique_together = ('parent', 'name',)
我要序列化父级,以便父级上的GET返回以下形式:
{
name: <parent name>,
children: {
<child name 1>: <age>,
<child name 2>: <age>
}
}
目前,我只能通过使用以下序列化程序来弄清楚如何返回子级列表:
class ParentSerializer(serializers.ModelSerializer):
children = ChildrenSerializer(many=True,read_only=True)
class Meta:
model = Parent
fields = '__all__'
哪个返回:
{
name: <parent name>,
children: [
{
name: <child name 1>,
age: <child age 1>
},
{
name: <child name 2>,
age: <child age 2>
}
]
}
如何让父级序列化程序返回以“子级”命名的单个词典,而不是字典列表?
答案 0 :(得分:2)
您可以使用SerializerMethodField
来获取children
作为父母,并自己构建该词典:
class ParentSerializer(serializers.ModelSerializer):
children = serializers.SerializerMethodField()
def get_children(self, obj):
return {c.name: c.age for c in obj.child_set.all()}
class Meta:
model = Parent
fields = '__all__'