一尘不染

在Django中一页上处理多种形式的正确方法

python

我有一个模板页面,需要两种形式。如果我仅使用一种形式,则可以像下面的典型示例一样正常:

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')

阅读 350

收藏
2020-02-18

共1个答案

一尘不染

  1. 两种形式的操作中放入不同的URL。然后,你将具有两个不同的视图函数来处理两种不同的形式。

  2. 从POST数据中读取提交按钮的值。你可以确定单击了哪个提交按钮:如何构建多个Django提交按钮?

2020-02-18