これは、Django プロジェクトに取り組んでいるときに発生した問題です。フォームバリデーションについてです。
Django では、送信されたフォームがある場合is_valid()
、対応するフォーム オブジェクトを呼び出して検証をトリガーし、ブール値を返すことができます。したがって、通常、ビュー関数内に次のようなコードがあります。
if form.is_valid():
# code to save the form data
is_valid()
フォーム データを検証するだけでなく、後でユーザーに表示できるエラー メッセージをフォーム オブジェクトに追加します。
1 つのページで 2 つのフォームを一緒に使用し、両方のフォームに有効なデータが含まれている場合にのみデータを保存したいと考えています。つまりis_valid()
、コードを実行してデータを保存する前に、両方のフォームを呼び出す必要があります。最も明白な方法:
if form1.is_valid() and form2.is_valid():
# ...
論理演算子の短絡評価のために機能しません。form1
が有効でない場合はform2
評価されず、エラー メッセージが表示されません。
これはほんの一例です。私の知る限り、他の言語 (つまり Smalltalk) のようにand
/に代わる貪欲な方法はありません。or
その問題がさまざまな状況で発生することは想像できます (Python だけでなく)。私が考えることができる解決策は、すべての種類の不器用です (ネストされたif
s、戻り値をローカル変数に割り当て、それらをif
ステートメントで使用する)。この種の問題を解決するためのpythonicな方法を知りたいです。