django - 从 Django 中的单个页面处理不同表单的最佳方法是什么?

标签 django django-forms

假设我在 View 中定义了 3 种不同的形式:

# views.py
form_one = FormOne()
form_two = FormTwo()
form_three = FormThree()

在我的模板中:

<form action="" method="post" id="form-one">
  {{ form_one.as_table }}
  <input type="submit" value="Submit Form One" name="form-one" />
</form>

<form action="" method="post" id="form-two">
  {{ form_two.as_table }}
  <input type="submit" value="Submit Form Two" name="form-two" />
</form>

<form action="" method="post" id="form-three">
  {{ form_three.as_table }}
  <input type="submit" value="Submit Form Three" name="form-three" />
</form>

假设每个表单都有自己唯一的字段名称,我如何从一个 View 中处理所有 3 个表单?我在考虑以下方法,但我不确定这是否是解决此问题的最佳方法:

# views.py

if request.method == 'POST':
    request_post = request.POST
    if 'form-one' in request_post:
        form_one = FormOne(request.POST)
    elif 'form-two' in request_post:
        form_two = FormTwo(request.POST)
    else:
        form_three = FormThree(request.POST)
else:
    form_one = FormOne()
    form_two = FormTwo()
    form_three = FormThree()

有什么意见或建议吗?

最佳答案

处理多个表单的正确方法是在创建表单时使用“prefix”属性。您的 View 应该是这样的:

if request.method == 'POST':
    form1 = Form1(request.POST, prefix='form1')
    form2 = Form2(request.POST, prefix='form2')
    form3 = Form3(request.POST, prefix='form3')

    if form1.is_valid() and form2.is_valid() and form3.is_valid():
        # Do whatever you have to do
        pass

else:
    form1 = Form1(prefix='form1')
    form2 = Form2(prefix='form2')
    form3 = Form3(prefix='form3')

模板保持不变,不需要额外的逻辑:

<form ...>
    {{ form1.as_table }}
    {{ form2.as_table }}
    {{ form3.as_table }}

    <input type="submit" ... />
</form>

关于django - 从 Django 中的单个页面处理不同表单的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3566612/

相关文章:

python - 当 Django 似乎正在搜索正确的路径时如何解决 'TemplateDoesNotExist' 错误

python - Django modelformset_factory 什么都不保存

python - 在 Django 测试框架中使用 Basic HTTP 访问认证

python - Django 模型形式 - 多个模型

Django 形成最小和最大价格输入

django - 将 ul 列表发送到 django 中的表单

django - 如何将对象传递到表单并在 Django 中提交它们

Django Rest框架自定义序列化一个字段

django - 在 django >= 1.8 中使用 import_module 的推荐做法

django - Django 中的复杂表单 - 我应该查看哪些应用程序和 Django/Python 功能?