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 验证的主要内容,如果未能解决你的问题,请参考以下文章

django Form验证

Django:清理和验证相互依赖的表格

Django自带用户验证框架

Django(59)验证和授权

django简单用户登陆验证

django项目中的验证码模块