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=True
与 required=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 在一个模板上具有相同的字段名称