1. ホーム
  2. ジャンゴ

[解決済み】Djangoで1ページで複数のフォームを扱う適切な方法

2022-04-01 20:44:35

質問

テンプレートページに2つのフォームを用意しています。 1つのフォームを使用する場合は、この典型的な例のように、物事はうまくいきます。

if request.method == 'POST':
    form = AuthorForm(request.POST,)
    if form.is_valid():
        form.save()
        # do something.
else:
    form = AuthorForm()

しかし、複数のフォームを処理したい場合、フォームのうちのひとつだけを送信し、他のフォームは送信しないことをビューに知らせるにはどうしたらよいでしょうか (つまり、request.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')

解決方法は?

いくつかの選択肢があります。

  1. 2つのフォームのアクションに異なるURLを記述します。 そうすれば、2つの異なるフォームを処理するために、2つの異なるビュー関数を持つことができます。

  2. POSTデータからサブミットボタンの値を読み取る。 どのサブミットボタンがクリックされたかを知ることができます。 複数の送信ボタンを持つ django フォームを作成するには?