需要 Django Rest Framework 嵌套序列化程序 = False 错误

Posted

技术标签:

【中文标题】需要 Django Rest Framework 嵌套序列化程序 = False 错误【英文标题】:Django Rest Framework Nested Serializer required=False error 【发布时间】:2015-06-18 19:26:34 【问题描述】:

在 DRF v3.1 中,我有一个嵌套序列化程序,很像文档中详述的那个 - http://www.django-rest-framework.org/api-guide/serializers/#dealing-with-nested-objects

class SerializerA(serializers.Serializer):
    details = DetailsSerializer(required=False)

但是,当尝试使用此序列化程序但未提供详细信息时,我收到以下信息:

u'details': [u'This field may not be null.']

鉴于文档,这似乎不正确?

有其他人遇到过这个问题或者可以将其验证为错误吗?

【问题讨论】:

repr(SerializerA())的相关输出是什么?您可能希望将allow_null 设置为DetailsSerializer 嗨,输出是SerializerA(): details = DetailsSerializer(required=False): a = CharField(max_length=100, min_length=1, required=True) 此外,根据文档,如果嵌套表示可以选择接受 None 值,则应将 required=False 标志传递给嵌套序列化程序。对我来说,这意味着我不需要 allow_null 参数? 【参考方案1】:

好的,所以 Kevin Browns 的评论是正确的。我需要添加 allow_null=True。

class SerializerA(serializers.Serializer):
    details = DetailsSerializer(required=False, allow_null=True)

这样做的原因是,在构造序列化程序时,设置 required=False 允许数据中缺少字段详细信息。

例如 s = SerializerA(data=)

而 allow_null 允许指定参数但为空。

例如 s = SerializerA(data='details': None)

这引发了 DRF Browsable API 的另一个问题,但我将在另一个问题中提出。

【讨论】:

伙计,我为这个错误苦苦挣扎了几个小时。谢谢!顺便问一下,我在哪里可以找到这个序列化程序文档? 如果你有一个 1:N 的关系,设置 required=False 是不够的。您必须将 many=true 传递给序列化程序。 ``` class CustomerSerializer(serializers.ModelSerializer): contact = ContactSerializer(many=True, read_only=True) ``` 是通过谷歌来的,所以我希望有人能看到这个评论

以上是关于需要 Django Rest Framework 嵌套序列化程序 = False 错误的主要内容,如果未能解决你的问题,请参考以下文章

需要 Django Rest Framework 嵌套序列化程序 = False 错误

django-rest-framework 按日期过滤=无

django-rest-framework:如何序列化已经包含 JSON 的字段?

Django Rest Framework:非模型服务

Django rest_framework 实用技巧

如何使用 django-rest-framework 进行社交登录? [关闭]