我想要做的是在视图中添加一个错误,在form.is_valid()
和之后form.save()
,它似乎有效,但只是因为黑客,我希望这里有人可以解释它为什么有效。
因此,在我的表单save()
功能中,我连接到 LDAP 服务器,并尝试验证表单中提供的用户和密码。如果一切正常,最终发生的是一个User
对象,并且Profile
创建了一个对象。但是,在用于连接到 LDAP 并从 LDAP 获取数据的代码中,可能会发生错误,例如凭据错误或根本无法绑定到服务器。在这种情况下,我返回None
,然后我的视图通过向表单添加错误来处理它。这是视图中的相关代码:
if form.is_valid():
profile = form.save()
if profile is None:
# there was an LDAP error
msg = u"An error ocurred trying to authenticate over LDAP. Try again."
form = form_class(request.POST)
print form
form._errors['user_name'] = ErrorList([msg])
return render_to_response(template_name, locals())
现在,在注释掉该打印语句后,'NoneType' object does not support item assignment
当我尝试将错误添加到表单时,我得到了一个。如果我取消注释打印语句,它会像我期望的那样工作。关于为什么的任何想法?无论如何,我可以在没有打印语句的情况下做到这一点?谢谢!
PS:我不想在 clean 方法中进行表单验证,因为我不想绑定到 LDAP 服务器并尝试对用户进行两次身份验证,我只希望它发生一次,它要么工作要么不不。