Django 验证
Posted
技术标签:
【中文标题】Django 验证【英文标题】:Django validation 【发布时间】:2018-09-28 00:47:46 【问题描述】:我来自 Ruby on Rails 背景,我刚刚在 Django 中开始了这个项目。
我开始搞乱模型,我刚刚发现出于兼容性问题,Django 在保存之前不会完全清理(验证)模型实例。好吧,奇怪。
第二个惊喜如下:
我使用 BooleanField 类型的字段test
创建了一个模型(根据 Django 文档,默认验证不应为空白或 null)
我创建了上述模型的一个新实例,没有设置字段test
我执行了一次 full_clean,它返回 None
,一切似乎都是有效的。为什么?
我执行保存并返回 IntegrityError: null value in column "test" violates not-null constraint
。
是我还是这一切都违反直觉?如何要求和验证 BooleanField 类型的字段?
编辑: 我不想管理表单提交,因为我想使用 django_rest_framework 管理所有数据流。
【问题讨论】:
【参考方案1】:这似乎是解决问题的方法。该问题确实存在,但尚未在任何地方得到很好的记录:
http://notes.noumenal.es/2017/12/13/required-by-default.html
或者,只需像这样创建一个RequiredBooleanField:
class RequiredBooleanField(models.BooleanField):
def __init__(self, *args, **kwargs):
super(RequiredBooleanField, self).__init__(*args, **kwargs)
self.blank = False
if 'blank' in kwargs.keys():
self.blank = kwargs['blank']
【讨论】:
【参考方案2】:我建议您尝试使用ModelSerializer - 这是获取提交到您的 API 的数据、验证数据并在您的数据库中创建实例的标准方法。
【讨论】:
我不会使用表单提交数据 @pnknrg 我已经更新了我的答案。我已经广泛使用了 Django Rest Framework,而且我相信您正在寻找 ModelSerializers。 我已经在使用一个序列化程序,默认情况下它会获取模型定义传递的空白=真。所以这也没有奏效。我在下面写下了我的问题的答案。以上是关于Django 验证的主要内容,如果未能解决你的问题,请参考以下文章