我有2个模型,Parent an Child(fk Parent)和2个序列化器:
class ParentSerializer(serializers.HyperlinkedModelSerializer):
children = serializers.SerializerMethodField()
class Meta:
model = Parent
fields = (
'username',
...
'url',
'children',
)
def get_children(self, obj):
queryset = Child.objects.filter(parent=obj)
children = ChildSerializer(queryset, many=True, context=self.context).data
return children
class ChildSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Child
fields = [
'parent',
...
'url',
]
我的TestCase:
class TestSerializers(TestCase):
def test_child_serializer(self):
parent_data = {
'username': 'JohnSnow',
...
}
parent = Parent.objects.create_user(**user_data)
parent.set_password('jon12345')
child_data = {
'parent': {
'username': "JohnSnow",
...
},
# 'parent': user,
...
}
serializer = ChildSerializer(data=sample_ig_user_data)
if not serializer.is_valid():
print(serializer.errors)
我的错误:{'parent': ['Incorrect type. Expected URL string, received dict.']}
首先,我尝试将父级既作为字典又作为创建的对象传递。 在子序列化器中有一个细微差别,父进程只是作为超链接传输(在api中的浏览器中显示) 顺便说一下如何将父级的序列化器传递给子序列化器,如果我已经在父级中导入了子级,那么循环导入是因为?
第二个问题,关于错误,我明白我要么错误地将数据传输到字典,要么错误地处理它? 请帮忙。普遍谢谢!
答案 0 :(得分:1)
Incorrect type. Expected URL string, received dict.
- >你需要传递父母的主键:
child_data = {
...
'parent': parent.pk,
...
}