完全丢失:在Django Rest框架中使用序列化程序和更新的多对多
我已经研究这个问题好几个小时了,现在还没有找到解决方案。我就是不明白 我的父母有很多孩子。我创建了一个视图,允许我获取父对象的所有子对象。现在我想结束这个列表,并用新的子列表对父对象进行修补。我知道我需要编写一个自定义的完全丢失:在Django Rest框架中使用序列化程序和更新的多对多,django,django-rest-framework,vue.js,Django,Django Rest Framework,Vue.js,我已经研究这个问题好几个小时了,现在还没有找到解决方案。我就是不明白 我的父母有很多孩子。我创建了一个视图,允许我获取父对象的所有子对象。现在我想结束这个列表,并用新的子列表对父对象进行修补。我知道我需要编写一个自定义的update方法,但我不知道如何实现这一点 以下是我的子序列化程序: class ChildSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = models.Ch
update
方法,但我不知道如何实现这一点
以下是我的子序列化程序:
class ChildSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = models.Child
fields = ('id', 'url', 'name',)
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
这是我的父序列化程序:
class ChildSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = models.Child
fields = ('id', 'url', 'name',)
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
我对需要发生什么的理解是
validated\u data.pop('children')
:“1969-03-14”}]我认为你的JSON不正确。应该是这样的:
{
"id": 1,
"url": "some url",
"name": "John Smith",
"children": [
{"id": 2, "url": "child url", "name": "childs name"},
{"id": 3, ...}
]
}
到这里来寻找这个问题的简单解决方案。它不涉及重写更新方法,因此在使用M2M的序列化程序中是通用的:
键实例化序列化程序,传递实例、数据字典和
partial=True
标志,以便更新除主键以外的所有给定字段。提交的子项是否包含预期值?我是说在更新方法中。你把它打印出来了吗?请原谅我的无知,但你说的“打印出来”是什么意思?打印(提交给孩子们)还是其他任何调试方式。当我做补丁的时候,它是空的!我发送API的方式不知道该放在哪里。作为补丁,它只会给孩子们写信。是吗?按照您创建update
方法的方式,它只会编写子对象。