django - 在 Django 中处理一页上的多个表单的正确方法

我有一个需要两种形式的模板页面。如果我只使用一种形式,那么就像这个典型的例子一样:

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

但是,如果我想使用多个表单,我如何让 View 知道我只提交一个表单而不是另一个(即它仍然是 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。然后你会有两个不同的 View 函数来处理这两种不同的形式。

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

https://stackoverflow.com/questions/1395807/

相关文章:

python - 如何检查有效的电子邮件地址?

python - Django CSRF 检查因 Ajax POST 请求而失败

python - 更改 pandas DataFrame 中的特定列名

linux - 从文件列表中获取输入的 Tar 归档

linux - 如何检测网线/连接器的物理连接状态?

python - 在 scikit-learn 中将分类器保存到磁盘

linux - 当程序具有命令行参数时,如何使用 GDB 分析程序的核心转储文件?

python - Python SciPy 需要 BLAS 吗?

linux - 您可以将 Amazon EBS 附加到多个实例吗?

python - 为什么元组可以包含可变项?