2010-11-24 13 views
1

私はform.is_valid()を呼び出してデータを検証するdjangoフォームを持っています。そうでない場合は、フォームが再表示され、無効なデータに関するエラーメッセージが表示されます。 これで、is_valid()がtrueの場合、データをldapバックエンドに保存しようとしています。 form.cleaned_dataがldapデータ型に対応していない場合、私はldap saveメソッドからExceptionを取得します。今度は、この場合、form.is_valid()がfalseを返した後に起こるようなエラーメッセージでフォームを再表示します。 私はいくつかのドキュメントといくつかのdjangoのソースを読み込もうとしましたが、どこにこれに触れることができませんでした。カスタムエラーメッセージでis_valid()を呼び出した後にdjangoフォームを再表示します

代わりに、データがldap構文に準拠していることを「保証」する(カスタム)フォームフィールドの形式を慎重に構築することもできます。 しかし、私はldap構文エラーを捕まえて便利な形式で表示するようにしたいと思います。だから私はそのフォームに再接続することができれば、再表示メカニズムは私を幸せな小さなプログラマーにします:-)

アイデアやヒント?フォームのサブクラスで

答えて

2

、あなたがどこかに定義されたis_valid_ldap_data()を持っていると仮定して、次のいずれかの方法を追加します。フォーム全体のため

def clean(self): 
    if !is_valid_ldap_data(self.cleaned_data.get("fieldname")): 
     raise forms.ValidationError("Invalid LDAP data type"); 
    return self.cleaned_data 

または単一のフィールドのために:

def clean_fieldname(self): 
    if !is_valid_ldap_data(self.cleaned_data['fieldname'])): 
     raise forms.ValidationError("Invalid LDAP data type"); 
    return self.cleaned_data['fieldname'] 
1

は、それが属する場所

http://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-a-specific-field-attribute

検証ロジックが行かなければならないカスタムフィールドの検証メソッドを実装します。 form.is_valid() == Trueform.cleaned_data)が有効である必要があります。コードがそう言っているからです。いくつかの検証ロジックをどこかに隠しておきたい - それは悪い習慣です。 forms.Formを拡張フォームのためのあなたのクラスの下で

+1

良い点。それは私の論理を再考させます。実際にldapに書き込むまで、ldapでldapの構文をチェックする方法はありません。ですから、カスタムチェックを行うか、is_valid()をsi_valid_and_successfully_saved()のようなものに書き直す必要があります。 – Isaac

0

あなたには検証の追加手順があります。これに応じて、
あなたは可能性は、特定のニーズです:

をご field上または multiple fields at onceに追加の清掃を実施するシンプルなものをチェックするために、自分のフィールド上 validatorを入れ、または
  • いずれの場合もフォームが何らかの理由で有効でない場合(あなたの場合のように)、is_validはFalseを返します。

  • +0

    私は同意します。 petraszd答えに私のコメントを参照してください。 – Isaac

    関連する問題