_changed()缺少2个必需的位置参数:“initial”和“data”

2024-06-11 07:56:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过如下方式在视图中进行检查来防止用户干预隐藏的表单字段:

if form.fields["email"].has_changed():
    form.add_error(
        "email",
        ValidationError(
            "Email does not correspond to user", code="invalid_email",
        ),
    )

但我得到以下类型错误:

has_changed() missing 2 required positional arguments: 'initial' and 'data'

在这一点上,form是一个“绑定表单”,它已经通过了用户和POST请求

检查函数本身,它似乎有两个非可选参数,但文档中根本没有提到这些参数,而且我也不太清楚应该传递什么:如果我必须自己提供初始值和新值,我可以自己比较它们,而不需要这种方法。我错过了什么

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


Tags: 用户formadd视图fields参数ifemail
2条回答

在更彻底地检查了我的代码之后,我注意到在我执行has_change()检查的那一刻,表单上还没有运行验证。一旦在form.is_valid()检查后移动,_change()是否按预期工作

事实上,它是一个绑定形式,没有多大区别。form.fields是一个映射表单字段上字符串的字典。表单使用字段的^{} method [GitHub]来确定值是否确实已更改

通过检查changed_data字典,可以检查值是否已更改:

if 'email' in form.changed_data:
    form.add_error(
        "email",
        ValidationError(
            "Email does not correspond to user", code="invalid_email",
        ),
    )

相关问题 更多 >