使用cleaning_data.get(" field")会在未打印表单时导致AttributError

时间:2015-12-05 23:36:28

标签: python django django-class-based-views

美好的一天SO!

我有一个奇怪的情况,我不明白。我有一个FormView,用户可以在其中填写用户名或电子邮件来恢复帐户的密码。在视图FormView中我得到以下情况:

class RecoverPassword(FormView):
    """ Request password recovery by username or email address """

    template_name = "users/recover.html"
    form_class = RecoverPasswordForm

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        print(form) # <<<--- Removing this results in an error
        username = form.cleaned_data.get("username")

        if username:
            print(username)

        return HttpResponseRedirect(self.get_success_url())

这样可行,填充的用户名显示在终端中。 但是,如果我删除以下行:

print(form)

并使用用户名填写表单并点击提交,我得到以下内容 错误:

  

异常类型:AttributeError
  例外价值:&#39; RecoverPasswordForm&#39;对象没有属性&#39; cleaning_data&#39;

我无法弄清楚为什么会这样。有人知道这里发生了什么吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

为什么要在post中执行此操作?改为使用form_valid方法:

def form_valid(self, form):
    username = form.cleaned_data.get("username")

    if username:
        print(username)
    return HttpResponseRedirect(self.get_success_url())