私がやろうとしているのは、との両方の後に、ビュー内のフィールドにエラーを追加することです。これは機能しform.is_valid()
てform.save()
いるように見えますが、ハックが原因であるためです。ここの誰かが、なぜ機能するのかを説明してくれることを願っています。
そのため、フォームのsave()
機能では、LDAPサーバーに接続し、フォームで指定されたユーザーとパスワードを認証しようとします。すべてが機能する場合、最終的に発生するのはUser
オブジェクトであり、Profile
オブジェクトが作成されます。ただし、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' object does not support item assignment
、フォームにエラーを追加しようとすると、が表示されます。printステートメントのコメントを外すと、期待どおりに機能します。理由について何かアイデアはありますか?そしてとにかく、私はそこにその印刷ステートメントがなくてもこれを行うことができますか?ありがとう!
PS:LDAPサーバーにバインドしてユーザーを2回認証する必要がないため、cleanメソッドでフォームの検証を行いたくありませんでした。1回だけ実行したいのですが、機能するか機能しないかのどちらかです。 't。