gpt4 book ai didi

python - Django Rest Framework 序列化器关系 : How to get list of all child objects in parent's serializer?

转载 作者:IT老高 更新时间:2023-10-28 21:10:01 24 4
gpt4 key购买 nike

我是 DRF 的新手,刚刚开始构建 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)

为了创建序列化程序,我遵循了 DRF Serializer Relations我创建它们如下:

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')

我正在尝试获取 parent 序列化程序中所有 child 的列表。我想要的是能够得到这样的回应:

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

我没想到这会起作用,因为在 Parent 模型中 Parent 和 Child 之间没有链接,but it is the suggested way to do it in the documentation ,但它不起作用。

我收到以下错误消息:

Got AttributeError when attempting to get a value for field `children` on serializer `ParentSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `Parent` instance.
Original exception text was: 'Parent' object has no attribute 'children'.

我认为这是完全合理的,但我无法理解我在这里缺少什么。

如何获取父序列化程序中所有子节点的列表?

最佳答案

我认为您的问题是您忘记为您的 Children 模型添加 related_name。我会有这样的模型:

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

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

而且我认为通过此更改,您将解决您遇到的错误

关于python - Django Rest Framework 序列化器关系 : How to get list of all child objects in parent's serializer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33853255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com