Django 模型和 ModelForms 中的空白、Null 和必需

Posted

技术标签:

【中文标题】Django 模型和 ModelForms 中的空白、Null 和必需【英文标题】:Blank, Null, and Required in Django Models and ModelForms 【发布时间】:2013-06-16 10:45:42 【问题描述】:

到目前为止,我还没有在 Django 的模型和表单中找到关于空白、null 和必需的明确解释。


我知道每个的默认值如下:

blank = False
null = False
required = True

我也知道:

blank=True(在models.py中使用),表示在表单级别,接受空表单-表单中不需要关联的字段。

null=True(在models.py中使用),意味着在数据库级别上Python的None值可以存储在模型中并被保存(然后最终在数据库中作为SQLNULL值)。

required=False(在forms.py中使用),表示不需要关联的表单字段。


希望以上信息对其他人有用(如果逻辑有任何缺陷,请告诉我,我会更新它)。

我的问题如下:

我何时知道何时使用 blank=Truerequired=False。如果我的目标是使表单字段不需要,我可以使用blank=True 在模型中定义它,或者我可以使用required=False 在表单中定义它。这是否意味着您可以在模型中定义blank=True,并在关联的ModelForm 中用required=True 覆盖它?

同样相关的是,当您使用常规形式 (forms.Form) 时呢?由于表单不与模型关联(通过视图逻辑除外),如果它们再次相互矛盾会发生什么?

【问题讨论】:

what 与 what 相矛盾时,如果表单未与模型关联。 【参考方案1】:

矛盾并不重要。我认为这为 Django 应用程序的开发带来了灵活性。例如,如果您使用定义了一些模型的第三方库,并且它们设置了blank=True,但出于其他目的您需要该字段是强制性的,那么在您的表单中您可以在不触及第三方库代码的情况下修复它.

这只是为框架增加了一些灵活性,恕我直言,不会带来任何伤害。您可以将其用于您自己的目的。矛盾并不显着。

希望这会有所帮助!

【讨论】:

再次感谢,这是有道理的,也为表单提供了更多的权力。 这是一个很好的答案,它解释了原因及其用例。【参考方案2】:

这取决于要求。有时我们稍后决定在表单上强制填写字段,尽管在模型上它仍然不是必需的。但表格将确保必须填写该字段。

您可以在模型上添加null=True,然后您可以在表单上将该字段设为必填字段。但是你不能在表单中设置一个可选的字段,当它在模型上是强制性的,这将导致以后的数据库错误。

【讨论】:

如果模型中有null=True,则该字段将在表单上为必填项。只有Model中的blank=True在对应的ModelForm中设置required=False。我之前一直被模型表单的这种不直观的方面所困扰

以上是关于Django 模型和 ModelForms 中的空白、Null 和必需的主要内容,如果未能解决你的问题,请参考以下文章

Django ModelForms - “实例”没有按预期工作

如何在Django中只在ModelForms表中正确提交一个表单?

django 两个 ModelForms 在一个模板上具有相同的字段名称

如何在 django 的 ModelForms 中的标签后添加空格

显示 ModelForms 的 django 表单验证错误

Django的Modelforms的介绍