正在向视图中的django窗体添加错误。。。乱劈

正在向视图中的django窗体添加错误。。。乱劈,django,ldap,django-forms,django-validation,Django,Ldap,Django Forms,Django Validation,我想做的是在视图中的form.is\u valid()和form.save()之后为字段添加一个错误,它似乎可以工作,但只是因为有黑客攻击,我希望这里的人能解释为什么它可以工作 因此,在表单的save()函数中,我连接到LDAP服务器,并尝试验证表单中提供的用户和密码。如果一切正常,最终将生成一个User对象,并创建一个Profile对象。但是,在连接到LDAP并从LDAP获取数据的代码中,可能会发生错误,例如错误的凭据或无法绑定到服务器。在这种情况下,我返回None,然后我的视图通过向表单中添

我想做的是在视图中的
form.is\u 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())
现在,随着print语句被注释掉,当我尝试将错误添加到表单时,我得到了一个不支持项分配的
'NoneType'对象。如果我取消对print语句的注释,它的工作方式与我预期的一样。你知道为什么吗?不管怎么说,我可以在没有打印语句的情况下做这件事?谢谢


PS:我不想使用clean方法进行表单验证,因为我不想绑定到LDAP服务器并尝试两次验证用户,我只希望它发生一次,然后它要么工作要么不工作。

表单。\在验证发生之前,错误不存在。通过调用
print form
,您就隐式地调用了新表单实例的
form.is\u valid()


这就提出了一个问题,为什么要创建一个新的表单实例?我会注释掉
form=form\u class(request.POST)
行并使用您现有的表单。

表单。\u错误在验证发生之前不存在。通过调用
print form
,您就隐式地调用了新表单实例的
form.is\u valid()


这就提出了一个问题,为什么要创建一个新的表单实例?我会注释掉
form=form\u class(request.POST)
行并使用您现有的表单。

好问题。。很晚了,我很累,我整天都在干这个。这是我最好的答案:P但是谢谢,效果更好。好问题。。很晚了,我很累,我整天都在干这个。这是我最好的答案:P但是谢谢,效果更好。