Django模型和ModelForms中的空白,空和必需

Jok*_*ker 22 django django-models django-forms

到目前为止,我还没有在Django的模型和表单中找到关于blank,null和required的明确解释.


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

blank = False
null = False
required = True
Run Code Online (Sandbox Code Playgroud)

我也知道:

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

null=True (在models.py中使用),表示在数据库级别,空字符串将被存储为None与关联数据类型的空版本相对.

NULL (在forms.py中使用)表示不需要关联的表单字段.


希望上述信息能很好地服务于其他人(如果逻辑中存在任何缺陷,请告诉我,我会更新它).

我的问题如下:

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

还有关系,当你使用常规表格(required=True)时呢?由于表单与模型没有关联(除了通过视图逻辑),如果再次发生,它们会相互矛盾?

Pau*_* Bu 11

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

这只是为框架恕我直言增加了一些灵活性,这没有带来任何伤害.您可以将它用于您自己的目的.矛盾并不重要.

希望这可以帮助!

  • 这是一个很好的答案,它解释了原因和用例. (2认同)

Aam*_*nan 3

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

您可以null=True在模型上添加该字段,然后您可以将该字段设置为表单上的必填字段。但是,当模型上的字段为必填字段时,您不能在表单中将其设置为可选字段,这将导致稍后出现数据库错误。

  • 如果模型中为“null=True”,则该字段在表单上为必填字段。只有 Model 中的 `blank=True` 才会在对应的 ModelForm 中设置 `required=False`。我以前曾被模型形式的这种不直观的方面所困扰 (5认同)