has_changed()缺少2个必需的位置参数:“初始”和“数据”

问题描述 投票:1回答:2

我试图通过像这样查看视图来防止用户干预隐藏的表单字段:

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请求的“绑定表格”。

检查函数本身,它似乎确实有两个非可选参数,但是文档中根本没有提及这些参数,而且我也不很清楚该传递什么:如果我必须提供初始值,并且我自己有新的价值,我可以自己比较这些价值,而无需这种方法。我想念什么?

我还想到我只需要将该字段设置为禁用,任何更改的值都将被忽略,但是我仍然很好奇。

python django django-forms
2个回答
1
投票

它是绑定形式的事实并没有太大区别。 form.fields是将字符串映射到表单字段的字典。表单使用字段的has_changed method [GitHub]来确定该值是否确实已更改。

您可以通过检查has_changed词典来检查值是否已更改:

changed_data

0
投票

在更彻底地检查了我的代码之后,我注意到在进行has_changed()检查的那一刻,尚未在表单上运行验证。在if 'email' in form.changed_data: form.add_error( "email", ValidationError( "Email does not correspond to user", code="invalid_email", ), )检查之后移动后,has_changed()便按预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.