獲取父序列化程式中所有相關子物件的列表

假設我們實現了一個簡單的 API,並且我們有以下模型。

class Parent(models.Model):
    name = models.CharField(max_length=50)

class Child(models.Model):
    parent = models.ForeignKey(Parent)
    child_name = models.CharField(max_length=80)

我們希望在通過 API 檢索特定 parent 時返回響應。

{
'url': 'https://dummyapidomain.com/parents/1/',
'id': '1',
'name': 'Dummy Parent Name',
'children': [{
        'id': 1,
        'child_name': 'Dummy Children I'
    },
    {
        'id': 2,
        'child_name': 'Dummy Children II'
    },
    {
        'id': 3,
        'child_name': 'Dummy Children III'
    },
    ...
],

}

為此,我們實現了相應的序列化器,如下所示:

class ChildSerializer(serializers.HyperlinkedModelSerializer):

    parent_id = serializers.PrimaryKeyRelatedField(queryset=Parent.objects.all(),source='parent.id')

    class Meta:
        model = Child
        fields = ('url','id','child_name','parent_id')

    def create(self, validated_data):
        subject = Child.objects.create(parent=validated_data['parent']['id'], child_name=validated_data['child_name'])

        return child

class ParentSerializer(serializers.HyperlinkedModelSerializer):
    children = ChildSerializer(many=True, read_only=True)
    class Meta:
        model = Course
        fields = ('url','id','name','children')

為了使這個實現正常工作,我們需要更新我們的 Child 模型和新增 related_nameparent 領域。我們的 Child 模型實現的更新版本應該是這樣的:

class Child(models.Model):
parent = models.ForeignKey(Parent, related_name='children')  # <--- Add related_name here
child_name = models.CharField(max_length=80)

通過這樣做,我們將能夠獲取父級序列化程式中所有相關子物件的列表。