1. ホーム
  2. python

[解決済み] 複数の送信ボタンを持つ django フォームを作成するには?

2022-04-21 22:36:17

質問

私は、電子メール用の1つの入力と、ニュースレターの購読と購読解除のための2つの送信ボタンがあるフォームを持っています。

<form action="" method="post">
{{ form_newsletter }}
<input type="submit" name="newsletter_sub" value="Subscribe" />
<input type="submit" name="newsletter_unsub" value="Unsubscribe" />
</form>

クラスフォームもあります。

class NewsletterForm(forms.ModelForm):
    class Meta:
        model = Newsletter
        fields = ('email',)

私は自分で clean_email メソッドを書かなければなりませんが、どのボタンでフォームが送信されたかを知る必要があります。しかし、送信ボタンの値は self.cleaned_data ディクショナリを使用します。 他にボタンの値を取得することは可能でしょうか?

どのように解決するのですか?

を使用することができます。 self.data の中に clean_email メソッドを使用して、バリデーション前の POST データにアクセスすることができます。というキーが含まれている必要があります。 newsletter_sub または newsletter_unsub どのボタンが押されたかに応じて

# in the context of a django.forms form

def clean(self):
    if 'newsletter_sub' in self.data:
        # do subscribe
    elif 'newsletter_unsub' in self.data:
        # do unsubscribe