从文件:
read_only将此属性设置为True可确保在序列化表示时使用该字段,但在反序列化期间更新实例时不使用该字段 . 默认值为False通常如果在反序列化期间未提供字段,则会引发错误 . 如果在反序列化期间不需要此字段,则设置为false . 默认为True .
所以我有一个模型,它有一个不可空的字段,但我希望它在pre_save方法中填充,所以我在字典中将字段设置为 required=False
,但似乎不起作用 . 保存记录时我仍然收到错误 .
class FavoriteListSerializer(serializers.ModelSerializer):
owner = serializers.IntegerField(required=False)
class Meta:
model = models.FavoriteList
更新:我已经将 serializer_class = serializers.FavoriteListSerializer
添加到ViewSet,现在而不是获得 This field is required
,我认为这已经过了验证,但后来我得到 This field cannot be null.
我已经检查过pre_save方法没有被执行,有什么想法吗?
4 回答
是的,我也在某些时候遇到过这个问题 . 您还需要更新验证排除项 .
如果有人在这里遇到类似的问题,请注意以下属性以及
required
:allow_blank:
allow_null:
required:
我正在努力弄清楚为什么我在
required=False
得到验证错误,我错过了allow_null
属性 .迟到这个帖子 . 此问题已在django-rest-framework 2.3.13中修复 . 这是PR的链接 .
我想方法.get_validation_exclusions()现在被删除了 . 我没有在ModelSerializer doc中找到它并且它在覆盖后没有执行(djangorestframework == 3.8.2) . And i am not the only one facing this problem .
我的解决方案是只添加我想要不需要的字段的默认值 . 它应该适用于pre_save的情况: