举一个这样的例子:
class MyForm(forms.Form):
name = forms.CharField()
我试图弄清楚以下两个片段之间的区别:
“绑定数据”样式:
my_form = MyForm({'name': request.user.first_name})
“初始数据”样式:
my_form = MyForm(initial={'name': request.user.first_name})
文档似乎建议不要使用“initial用于动态初始值”,但是能够将“绑定数据”传递给构造函数完成完全相同的事情。在过去,我使用初始数据作为动态值,但我倾向于使用更直接的“绑定数据”样式,但希望了解这两种样式之间的真正区别。
这是django文档中关于bound and unbound forms的关键部分。
您不能真正看到您给出的示例表单的区别,因为该表单在“绑定数据”样式中是有效的。让我们通过添加一个
age
字段来扩展表单,这样差异将更加明显。装订形式
此表单无效,因为未指定
age
。在模板中呈现表单时,将看到age
字段的验证错误。具有动态初始数据的未绑定窗体
此表单未绑定。不会触发验证,因此在呈现模板时不会显示任何错误。
另一个区别是
data
期望小部件可以解析的内容,而initial
是每个字段。如果您使用MultiWidget
s,这会有所不同。在这种情况下data
应该包含如下内容而
initial
期望的是这样的:不,这不是区别所在(我想知道你在文档中是从哪里得到这种印象的)。区别在于是否执行验证。
初始数据不会触发验证。例如,这允许您预先填充某些字段,但保留其他字段为空,即使这些字段是必需的。如果使用绑定数据,那么即使在第一次查看该表单时,对于那些空的必需字段也会出现错误,这对用户来说是很烦人的。
当然,绑定数据会触发验证。此外,如果您使用的是modelform,则相关实例将仅使用绑定数据而不是初始数据进行更新。
相关问题 更多 >
编程相关推荐