如何在Django表单中创建多个提交按钮?
我有一个表单,里面有一个输入框用来填写邮箱,还有两个提交按钮,一个是订阅新闻通讯,另一个是退订:
<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
这个字典里。请问我还有其他办法获取按钮的值吗?
6 个回答
39
你也可以这样做,
<form method='POST'>
{{form1.as_p}}
<button type="submit" name="btnform1">Save Changes</button>
</form>
<form method='POST'>
{{form2.as_p}}
<button type="submit" name="btnform2">Save Changes</button>
</form>
代码
if request.method=='POST' and 'btnform1' in request.POST:
do something...
if request.method=='POST' and 'btnform2' in request.POST:
do something...
290
例如:
if 'newsletter_sub' in request.POST:
# do subscribe
elif 'newsletter_unsub' in request.POST:
# do unsubscribe
116
你可以在 clean_email
这个方法里使用 self.data
来获取用户提交的数据,这些数据是在验证之前的。这里面会有一个叫 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