我试图通过像这样查看视图来防止用户干预隐藏的表单字段:
if form.fields["email"].has_changed():
form.add_error(
"email",
ValidationError(
"Email does not correspond to user", code="invalid_email",
),
)
但是我收到以下TypeError:
has_changed()缺少2个必需的位置参数:'initial'和'data'
此时,form
是已通过用户和POST请求的“绑定表格”。
检查函数本身,它似乎确实有两个非可选参数,但是文档中根本没有提及这些参数,而且我也不很清楚该传递什么:如果我必须提供初始值,并且我自己有新的价值,我可以自己比较这些价值,而无需这种方法。我想念什么?
我还想到我只需要将该字段设置为禁用,任何更改的值都将被忽略,但是我仍然很好奇。
它是绑定形式的事实并没有太大区别。 form.fields
是将字符串映射到表单字段的字典。表单使用字段的has_changed
method [GitHub]来确定该值是否确实已更改。
您可以通过检查has_changed
词典来检查值是否已更改:
changed_data
在更彻底地检查了我的代码之后,我注意到在进行has_changed()检查的那一刻,尚未在表单上运行验证。在if 'email' in form.changed_data:
form.add_error(
"email",
ValidationError(
"Email does not correspond to user", code="invalid_email",
),
)
检查之后移动后,has_changed()便按预期工作。