我有一个模板页面需要两种形式。如果我只使用一种形式,那么就像这个典型的例子一样:
if request.method == 'POST': form = AuthorForm(request.POST,) if form.is_valid(): form.save() # do something. else: form = AuthorForm()
但是,如果我想使用多个表单,我如何让视图知道我只提交一个表单而不是另一个(即它仍然是 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 放入两个表单的操作中。然后你将有两个不同的视图函数来处理这两种不同的形式。
从 POST 数据中读取提交按钮的值。您可以知道单击了哪个提交按钮:如何构建多个提交按钮 django 表单?