我有一个需要两种形式的模板页面。如果我只使用一种形式,那么就像这个典型的例子一样:
if request.method == 'POST':
form = AuthorForm(request.POST,)
if form.is_valid():
form.save()
# do something.
else:
form = AuthorForm()
但是,如果我想使用多个表单,我如何让 View 知道我只提交一个表单而不是另一个(即它仍然是 request.POST 但我只想处理表单提交发生了什么)?
这是基于答案的解决方案,其中 expectedphrase 和 bannedphrase 是不同表单的提交按钮的名称,expectedphraseform 和 bannedphraseform 是形式。
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')
最佳答案
你有几个选择:
在两个表单的操作中放置不同的 URL。然后你会有两个不同的 View 函数来处理这两种不同的形式。
从 POST 数据中读取提交按钮的值。您可以知道点击了哪个提交按钮:How can I build multiple submit buttons django form?
https://stackoverflow.com/questions/1395807/