ホームページ  >  記事  >  バックエンド開発  >  単一の Django ページで複数のフォームを処理するにはどうすればよいですか?

単一の Django ページで複数のフォームを処理するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-19 04:22:02767ブラウズ

How Can I Handle Multiple Forms on a Single Django Page?

単一の Django ページで複数のフォームを処理する

単一の 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。