完全丢失:Django Rest Framework中的序列化程序和更新中的多对多

Dav*_*win 5 django django-rest-framework vue.js

我现在已经看了好几个小时了,我找不到解决办法.我只是没有得到它.

我有一个有很多孩子的父母.我创建了一个视图,允许我获取所有父母的孩子.现在我想结束该列表并使用新的子列表对父进行PATCH.我知道我需要编写一个自定义update方法,但我无法弄清楚如何使这个工作.

这是我的Child Serializer:

class ChildSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = models.Child
        fields = ('id', 'url', 'name',)
Run Code Online (Sandbox Code Playgroud)

这是我的父序列化器:

class ParentSerializer(serializers.HyperlinkedModelSerializer):
    children = ChildSerializer(many=True)

    class Meta:
        model = models.Parent
        fields = ('id', 'url', 'name', 'children',)

    def update(self, instance, validated_data):
        submitted_children = validated_data.get('children')
        if submitted_children:
            for child in submitted_children:
                child_instance = Child.objects.get(id=child.id)
                instance.children.add(child_instance)
        instance.save()
        return instance
Run Code Online (Sandbox Code Playgroud)

我对需要发生的事情的理解是......

  1. 获取提交的孩子 validated_data.pop('children')
  2. 循环遍历它们并将每一个添加到parent.children中
  3. 保存父模型

我可能在这里尝试了十几种不同的想法,但我似乎无法让它发挥作用.上面的代码不会更改children_set.

任何建议都非常受欢迎.

作为参考,我研究了以下内容:

http://www.django-rest-framework.org/api-guide/serializers/#saving-instances

http://www.django-rest-framework.org/api-guide/serializers/#writable-nested-representations

http://www.django-rest-framework.org/api-guide/serializers/#validation

django休息框架很多很多json写的

还有一堆,但我现在不记得了

更新:

[{"id":2,"url":" http://127.0.0.1:8000/api/v1/children/2 ","first_name":"Tom","last_name":"Jones","date_ofhirth ":"1969-03-14"}]

ils*_*005 3

我认为你的 JSON 不正确。它应该看起来像这样:

{
 "id": 1,
 "url": "some url",
 "name": "John Smith",
 "children": [
   {"id": 2, "url": "child url", "name": "childs name"},
   {"id": 3, ...}
 ]
}
Run Code Online (Sandbox Code Playgroud)