Serializer Test serializer.is_valid()= False

时间:2018-03-29 06:24:54

标签: python unit-testing testing django-rest-framework

我有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中的浏览器中显示) 顺便说一下如何将父级的序列化器传递给子序列化器,如果我已经在父级中导入了子级,那么循环导入是因为?

第二个问题,关于错误,我明白我要么错误地将数据传输到字典,要么错误地处理它? 请帮忙。普遍谢谢!

1 个答案:

答案 0 :(得分:1)

Incorrect type. Expected URL string, received dict. - >你需要传递父母的主键:

child_data = {
    ...
    'parent': parent.pk,
    ...
}