2012-01-05 1 views
0

Djangoでは、私はきれいな関数を持つフォームクラスを持っています。このクリーン機能では、オプションの選択ボックスが入力されたかどうかを確認します。Djangoのフォームクリーン機能では、オプションのフィールドが記入されたかどうかを確実にテストする方法はありますか?

def clean_session_1(self): 
    # Check if session_1 is filled out. 
    if self.cleaned_data['session_1']: 
     # more validation 
    return self.cleaned_data['session_1'] 

選択ボックスが入力された場合は、フィールドの検証がさらに行われます。

何らかの理由で、このコードはフィールドが入力されたかどうかをテストしておらず、毎回「より多くの検証」を実行しています。

私はこのフィールド "session_1"が記入されているかどうかを確実にテストできますか?ありがとう!

+2

でそれを確認することができます'クリーン'メソッド。 'clean_FOO'は確実にその1つのフィールドにアクセスできます。 –

答えて

1

self._raw_value('key')にアクセスして、フォームフィールド(つまりテキストのみで、Pythonオブジェクトには処理されません)に生のエントリを取得します。

更新:Ahsan氏の言うとおり、cleanメソッドで行います。おそらくスーパークラスのクリーンメソッドを呼び出す必要があります。フォームからの2つ以上のフィールドにアクセスする必要がある任意の時間は、あなたがメインを使用する必要があります以下の回答が意味するものではありますが、明示されていない状態がそうであるように

+0

フォームが 'forms.Form'をサブクラス化する場合、スーパークラスクリーンメソッドを呼び出す必要はありません。ドキュメントの[examples](https://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-and-validating-fields-that-depend-on-each-other)にはありません。 – Alasdair

+0

@Alasdair:もちろん、forms.Formが変更されない限り、あるいは共通の機能が共通のスーパークラスに組み込まれていない限り、もちろん、基本クラスには言及していません。 – Marcin

+0

理論上、はい。実際には 'forms.Form'クリーンメソッドは変更されません。これはフォームapiを壊すためです。文書化されていない内部の 'self._raw_value'にアクセスすることは、将来問題を引き起こす可能性がより高くなります。 – Alasdair

0

あなたは、フォームのきれいな方法

def clean(self): 
    data = self.data # data contains all fields, optional or required both 
    optional_field = data.get('optional_field', None) 
    # more validation 
    return optional_field 
+0

なぜ 'self.cleaned_data'の代わりに' self.data'にアクセスするのですか? inputが無効でない限り、 'required = False'のオプションのフィールドが両方にあります。 – Alasdair

関連する問題