Django で単一ページで複数のフォームを処理するには、慎重な考慮が必要です。以下に例を示すように、単一のフォームを処理するための一般的なアプローチ
if request.method == 'POST': form = AuthorForm(request.POST,) if form.is_valid(): form.save() # do something. else: form = AuthorForm()
は、複数のフォームを処理する場合には不適切になります。このシナリオに適切に対処するには、ビューでどのフォームが送信されたかを判断する必要があります。
1 つの方法は、各フォームに固有の送信ボタンの値を含めることです。 POST データを解析することで、ビューはクリックされた送信ボタンを識別し、対応するフォームを処理できます。
たとえば、送信ボタンを持つ Expectedphraseform と Bannedphraseform という名前の 2 つのフォームを考えてみましょう。それぞれ、期待フレーズと禁止フレーズと呼ばれます。次のコード スニペットは、送信ボタンの値を使用して複数のフォームを処理する方法を示しています。
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 の単一ページで複数のフォームを処理するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。