DRF:当使用unique_together时,父子关系序列化为字典而不是列表

时间:2018-11-28 23:40:18

标签: django django-models django-rest-framework

我对使用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>
        }
    ]
}

如何让父级序列化程序返回以“子级”命名的单个词典,而不是字典列表?

1 个答案:

答案 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__'