我有一个建立了名为tags
的GenericRelation的模型。 GenericRelation对象的blank
kwargs属性默认为True-因此在模型级别允许为null:
class Character(models.Model):
name = models.CharField(max_length=200)
date_of_birth = models.DateField()
tags = GenericRelation(TaggableTag, content_type_field='taggable_type', object_id_field='taggable_id')
在序列化程序中,我已将序列化程序附加到此标签字段,以确保在每次请求字符信息时都渴望加载该序列化程序。
class CharacterSerializer(serializers.HyperlinkedModelSerializer):
tags = TaggableTagSerializer(many=True)
class Meta:
model = Character
fields = ('id', 'name', 'date_of_birth', 'tags')
extra_kwargs = {
'tags': {'required': False, 'allow_null': True, 'default': None}
}
validators = []
正如您所看到的,我对验证规则有些过分了,但是所有人都必须确保它不会强制要求'tags'字段。
但是,POST路由似乎仍返回以下验证消息:
HTTP 400 Bad Request
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"tags": [
"This field is required."
]
}
我不确定该怎么做,我遵循了Django Rest Framework page about Validators上的文档-我敢肯定这可能是因为它是GenericRelation字段而不是普通字段,但是我我不确定如何解决。你能帮忙吗?
答案 0 :(得分:0)
想通了。
似乎序列化程序设置可以同时使用-GET和POST。除了我已经在序列化程序上提供的验证选项之外,我还需要指定TaggableTagSerializer的包含是可选的-不管验证如何,整个相关序列化器的包含都应标记为可选。
我需要更改这一行:
tags = TaggableTagSerializer(many=True)
对此:
tags = TaggableTagSerializer(many=True, required=False)