0

私がやろうとしているのは、との両方の後に、ビュー内のフィールドにエラーを追加することです。これは機能し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。

4

1 に答える 1

3

form._errors検証が行われるまで存在しません。を呼び出すことにより、新しいフォームインスタンスをprint form暗黙的に呼び出しています。form.is_valid()

どちらが問題を提起します、なぜあなたは新しいフォームインスタンスを作成しているのですか?行をコメントアウトして、form = form_class(request.POST)既存のフォームを使用します。

于 2010-07-23T04:13:45.717 に答える