首页 > 解决方案 > has_changed() 缺少 2 个必需的位置参数:“初始”和“数据”

问题描述

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

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

但我得到以下类型错误:

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

此时,form顺便说一句,是一个经过用户和POST请求的“绑定表单”。

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

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

标签: pythondjangodjango-forms

解决方案


它是绑定形式这一事实并没有太大区别。这form.fields是一个在表单字段上映射字符串的字典。表单使用字段的has_changed方法 [GitHub]来确定值是否确实已更改。

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

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

推荐阅读