PasswordChangeForm永远无效,模板中始终显示错误消息

时间:2019-04-10 15:05:12

标签: django python-3.x django-forms

我正在尝试在Django 2.1.7 Webapp中实现密码更改功能。即使我在更改密码页面上使用GET请求,模板中也存在以下两个错误:

两个密码字段不匹配。 您的旧密码输入错误。请再次输入。

此外,当我POST格式的数据时,form.is_valid()总是返回false,即使我可以确认错误消息(上面列出的错误消息)都是false。

除非手动输入,否则表单页面不会显示任何错误消息。

我已经尝试了解决方案here和许多类似的解决方案。据我所知,我的逻辑是相同的。

查看

def change_password(request):
    args = {}

    if request.method == "POST":
        form = PasswordChangeForm(data=request.POST, user=request.user)

        if form.is_valid():
            form.save()
            # Keep the user logged in after they change their password.
            update_session_auth_hash(request, form.user)
            return redirect("manager:profile")
        else:
            print("INVALID PASSWORD")
            print(form.error_messages)
    else:
        form = PasswordChangeForm(request.user)

    args["form"] = form

    return render(request, "manager/change_password.html", args)

模板

<head>
    {% extends 'manager/base.html' %}
    {% block title %}
        Change Password: {{ user.username }}
    {% endblock %}
</head>

{% block body %}

{% if form.error_messages %}
    {% for error, error_message in form.error_messages.items %}
        <b>{{ error_message }}</b><br>
    {% endfor %}
{% endif %}
<form method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <br>
    <button class="btn grey darken-3" type="submit">Save Changes</button>
</form>


{% endblock %}

我如何: 1.是否获得密码更改功能才能正确验证? 2.仅显示由POST引起的有效错误消息吗?

1 个答案:

答案 0 :(得分:0)

您可以使用类视图PasswordChangeView。它旨在与PasswordChangeForm一起使用。

您的表单中可能与以下内容有关:

int max = 0;
std::string house;

switch(max){
      case gryffindor > max : max = gryffindor;
  house = "gryffindor";
     case hufflepuff > max : max = gryffindor;
  house = "hufflepuff";
     case ravenclaw > max : max = gryffindor;
  house = "revenclaw";
     case slytherin > max : max = gryffindor;
  house = "slytherin";
        }

也许可以在form.is_valid方法之前手动运行此方法??? 抱歉,不能发表评论。没有足够的分数。