我有一个模板页面,期待两个表单.如果我只使用一种形式,情况就会很好,如下面这个典型示例所示:

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

但是,如果我想处理多个表单,我如何让视图知道我只提交了其中一个表单,而没有提交另一个表单(即它仍然是request.POST,但我只想处理提交的表单)?


This is the solution基于答案,其中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')

推荐答案

你有几个 Select :

  1. 在这两个表单的操作中放置不同的URL.然后,您将有两个不同的视图函数来处理这两种不同的形式.

  2. 从POST数据中读取提交按钮值.你可以知道点击了哪个提交按钮:How can I build multiple submit buttons django form?

Django相关问答推荐

以特定顺序获取模型实例时出现问题

在生产中添加整型主键

如何将Django项目连接到容器化的PostgreSQL数据库?

Django:我的上下文变量不能用于重复的for循环

如何在 Django 中设置与 Session 相关的字段

try 在 django 中发送验证邮箱,出现错误

测试 - 两个类共享相同的登录代码,但它只能在一个类中工作

Django Query 在基于通用类的 UpdateView 中重复了 2 次

如何在 django 中修改现有模型实例?

在 Django 中处理信用卡付款的最佳 Select 是什么?

Django Calendar日历小部件?

在 Django CharFields 中自动截断 max_length 字段

NoReverseMatch 错误

如何在 Django 模板上实现 back链接?

如何使用 select_for_update 在 Django 中获取查询?

django中的脏字段

Django Admin:如何在同一视图中显示来自两个不同模型的字段?

settings.DATABASES 配置不正确使用 django 1.4 执行 syncdb 时出错

具有 2 种语言的 Django 站点

有没有一种简单的方法可以从 CharField 填充 SlugField?