単一の Django テンプレート ページで複数のフォームを操作する場合、どのフォームが送信されたかを識別するのが難しい場合があります。この質問はこの問題に対処し、フォーム接頭辞を使用した解決策を提供します。
単一のフォームが使用されている場合、標準的なアプローチはリクエストメソッドをチェックし、それに応じてフォームを処理することです:
if request.method == 'POST': form = AuthorForm(request.POST,) if form.is_valid(): form.save() # do something. else: form = AuthorForm()
ただし、フォームが複数ある場合、request.POST オブジェクトを 1 つだけ受信しているときにどれを処理するかを決定するのは難しい場合があります。この質問で提案された解決策には、フォーム接頭辞の使用が含まれており、ビューでフォームを区別できるようになります。
提供されたソリューションでは、予期されるフォームごとに 1 つずつ、合計 2 つのフォーム インスタンスを作成し、POST 内の送信ボタンの値を検査します。データ。フォーム名と送信ボタン名にプレフィックスを使用することで、コードはどのフォームが送信されたかを判断できます。
if request.method == 'POST': if 'bannedphrase' in request.POST: bannedphraseform = BannedPhraseForm(request.POST, prefix='banned') if bannedphraseform.is_valid(): bannedphraseform.save() expectedphraseform = ExpectedPhraseForm(prefix='expected') elif 'expectedphrase' in request.POST: expectedphraseform = ExpectedPhraseForm(request.POST, prefix='expected') if expectedphraseform.is_valid(): expectedphraseform.save() bannedphraseform = BannedPhraseForm(prefix='banned') else: bannedphraseform = BannedPhraseForm(prefix='banned') expectedphraseform = ExpectedPhraseForm(prefix='expected')
このアプローチは、単一の Django ページで複数のフォームを効果的に処理し、意図したフォームのみが処理されるようにします。
以上が単一の Django ページで複数のフォームを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。