在Django的一个页面上处理多个表单的正确方式

问题:

我有一个模板页面期待两种形式。如果我只是使用一种形式,事情就好像在这个典型的例子中一样:

if request.method == 'POST':
    form = AuthorForm(request.POST,)
    if form.is_valid():
        form.save()
        # do something.
else:
    form = AuthorForm()

如果我想要使用多种形式,那么我该如何知道我只提交一种表单而不是其他的表单(即它仍然是request.POST,但是我只想处理提交的表单事情)吗?
 这是解决方案根据答案,expectedphrasebannedphrase是不同形式的提交按钮的名称,expectedphraseformbannedphraseform是表单。

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

回答:

你有几个选择:

  1. 在两种表单的操作中放置不同的URL。那么你将有两种不同的视图功能来处理两种不同的形式。
  2. 从POST数据读取提交按钮值。您可以判断哪个提交按钮被点击:How can I build multiple submit buttons django form?

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Proper way to handle multiple forms on one page in Django

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 6 = 4