【问题标题】:Django Rest Framework Invalid serializationDjango Rest Framework 无效的序列化
【发布时间】:2018-06-05 08:54:56
【问题描述】:

我正在尝试将字典序列化为关系序列化器,数据被序列化得很好,但验证器返回 false

RelationshipSerializer:

class RelationshipSerializer(serializers.ModelSerializer):

    user = UserSerializer(read_only=False)
    related_user = UserSerializer(read_only=False)

    class Meta:
        model = models.Relationship
        fields = (
            'user',
            'related_user',
        )

查看:

related_user_id = body["related_user"]
related_user = models.User.objects.get(id=related_user_id)

user = self.get_object()

user_serializer = serializers.UserSerializer(user).data
related_user_serializer = serializers.UserSerializer(related_user).data

# user_serializer and related_user_serializer return valid data.

data = {"user": user_serializer, "related_user": related_user_serializer}

serializer = serializers.RelationshipSerializer(data=data)

# Serializer works fine, it prints out data correctly    

serializer.is_valid() # Returns false

return Response(serializer.data)

当我登录 serializer.errors 我得到 ​​p>

{
    "required": "This field is required.",
    "null": "This field may not be null.",
    "invalid": "Invalid data. Expected a dictionary, but got {datatype}."
}

我尝试将我的序列化器字段设置为 null = Truerequired = False,但仍然没有成功

【问题讨论】:

    标签: python django serialization django-rest-framework


    【解决方案1】:

    在序列化器字段中尝试 allow_blank 和 allow_null:

    user = UserSerializer(read_only=False, allow_blank=True, allow_null=True)
    related_user = UserSerializer(read_only=False, allow_blank=True, allow_null=True)
    

    【讨论】:

    • .is_valid() 返回 false 时,我找到了答案。事实上,我的一个字段是一个空字符串。但是allow_blank 似乎不是序列化器构造函数的有效 kwarg。我通过将模型本身的字段更改为具有allow_blank=True 来解决此问题,从而解决了它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 2015-01-12
    • 2016-07-21
    • 2015-12-13
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多