【问题标题】:Serializer Test serializer.is_valid() = False序列化程序测试 serializer.is_valid() = False
【发布时间】:2018-03-29 06:24:53
【问题描述】:

我有 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',
        ]

我的测试用例:

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 中显示) 顺便问一下如何将parent的序列化器转给子序列化器,如果我已经在parent中导入了child,循环导入是因为?

第二个问题,关于错误,我知道我将数据错误地传输到字典或之后错误地处理它? 请帮忙。万能的谢谢!

【问题讨论】:

  • 请确保您粘贴了相关的代码示例。这个不告诉使用sample_ig_user_data 是什么。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    相关资源
    最近更新 更多