需要 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 错误