到目前为止,我还没有在Django的模型和表单中找到关于blank,null和required的明确解释。
我知道每个的默认值如下:
blank = False
null = False
required = True
我也知道:
blank=True
(在models.py中使用),表示在表单级别,接受空表单 - 表单中不需要关联字段。
null=True
(在models.py中使用),意味着在数据库级别上,Python None
值可以存储在模型中并保存(然后最终为SQL NULL
数据库中的值。)
required=False
(在forms.py中使用)表示不需要关联的表单字段。
希望上述信息能够很好地为他人服务(如果逻辑中存在任何缺陷,请告诉我,我会更新)。
我的问题如下:
我何时知道何时使用blank=True
与required=False
。如果我的目标是创建一个不需要的表单字段,我可以使用blank=True
在模型中定义它,或者我可以使用required=False
在表单中定义它。这是否意味着您可以在模型中定义blank=True
,并在关联的ModelForm
中使用required=True
覆盖此内容?
还相关,当你使用常规表单(forms.Form
)时呢?由于表单与模型没有关联(除了通过视图逻辑),如果再次发生,它们会相互矛盾?
答案 0 :(得分:9)
矛盾并不重要。我认为这为Django应用程序的开发带来了灵活性。例如,如果您使用的是定义某些模型的第三方库,并且它们设置了blank=True
,但出于其他目的,您需要该字段是必填字段,然后在您的表单中,您可以在不触及第三方的情况下修复它图书馆代码。
这只是为框架恕我直言增加了一些灵活性,这没有带来任何伤害。您可以将它用于您自己的目的。矛盾并不重要。
希望这有帮助!
答案 1 :(得分:2)
这取决于要求。有时我们决定在表单上强制字段,尽管在模型上仍然不需要。但是表单将确保必须填写字段。
您可以在模型上使用null=True
,然后您可以在表单上强制使用该字段。但是,如果在模型上强制要求以后会导致数据库错误,则无法在表单中创建字段。