【问题标题】:Django validationDjango 验证
【发布时间】: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 管理所有数据流。

【问题讨论】:

    标签: python django validation model boolean


    【解决方案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。
      • 我已经在使用一个序列化程序,默认情况下它会获取模型定义传递的空白=真。所以这也没有奏效。我在下面写下了我的问题的答案。
      猜你喜欢
      • 1970-01-01
      • 2012-04-20
      • 2014-07-16
      • 2012-09-30
      • 2012-08-13
      • 2016-03-03
      • 2020-11-08
      • 2011-09-28
      • 1970-01-01
      相关资源
      最近更新 更多