Django 查找提交的表单
Django find which form was submitted
我在一个模板中有 3 个表单集。在给定时间只有一个可见(另外两个完全隐藏):
<form style="display: none;">
所有 3 个表单都使用默认值呈现,即使没有输入数据也应该有效。
但是,我想知道在验证 views.py 时提交的是哪一个。
在 views.py 我有以下内容:
def submitted(request):
f1 = formset1(request.POST)
f2 = formset2(request.POST)
f3 = formset3(request.POST)
if f1.is_valid() or f2.is_valid() or f3.is_valid():
f1.save()
f2.save()
f3.save()
# Do a lot of calculations...
return render(request, 'submitted.html')
问题是如果只提交了 f1,我不想保存 f2 或 f3(每个表单集都有自己的提交按钮)。 “# 做大量计算...”部分内容非常广泛,我不想不必要地复制代码。
我如何才能使用相同的视图,但只保存提交的表单集并进行计算?
如果每个表单都有自己的提交按钮:
<form id='form1'>
...
<input type='submit' name='submit-form1' value='Form 1' />
</form>
<form id='form2'>
...
<input type='submit' name='submit-form2' value='Form 2' />
</form>
<form id='form3'>
...
<input type='submit' name='submit-form3' value='Form 3' />
</form>
然后提交按钮的名称将在 request.POST
中,无论提交的是哪个表单:
'submit-form1' in request.POST # True if Form 1 was submitted
'submit-form2' in request.POST # True if Form 2 was submitted
'submit-form3' in request.POST # True if Form 3 was submitted
我遇到过类似的问题,我在一个模板中有多个表单,我需要知道提交了哪一个。为此,我使用了提交按钮。
假设您有这样的表格:
<form yourcode>
# ... ...
# your input fields
# ... ...
<input method="post" type="submit" name="action" class="yourclass" value="Button1" />
</form>
<form yourcode>
# ... ...
# your input fields
# ... ...
<input method="post" type="submit" name="action" class="yourclass" value="Button2" />
</form>
你可以看到那些提交按钮的区别,第一个的值是Button1,第二个是Button2
在您看来,您可以拥有这样的控件:
def yourview():
# ... ...
# Your code
# ... ...
if request.method == 'POST':
if request.POST['action'] == "Button1":
# This is the first form being submited
# Do whatever you need with first form
if request.POST['action'] == "Button2":
# This is the second form being submited
# Do whatever you need with second form
因此,您可以使用按钮的值来控制提交哪个表单。还有其他方法可以做到这一点,但这种方法更容易解决我的问题。
您也可以使用名称 属性来过滤表格
我在一个模板中有 3 个表单集。在给定时间只有一个可见(另外两个完全隐藏):
<form style="display: none;">
所有 3 个表单都使用默认值呈现,即使没有输入数据也应该有效。
但是,我想知道在验证 views.py 时提交的是哪一个。
在 views.py 我有以下内容:
def submitted(request):
f1 = formset1(request.POST)
f2 = formset2(request.POST)
f3 = formset3(request.POST)
if f1.is_valid() or f2.is_valid() or f3.is_valid():
f1.save()
f2.save()
f3.save()
# Do a lot of calculations...
return render(request, 'submitted.html')
问题是如果只提交了 f1,我不想保存 f2 或 f3(每个表单集都有自己的提交按钮)。 “# 做大量计算...”部分内容非常广泛,我不想不必要地复制代码。
我如何才能使用相同的视图,但只保存提交的表单集并进行计算?
如果每个表单都有自己的提交按钮:
<form id='form1'>
...
<input type='submit' name='submit-form1' value='Form 1' />
</form>
<form id='form2'>
...
<input type='submit' name='submit-form2' value='Form 2' />
</form>
<form id='form3'>
...
<input type='submit' name='submit-form3' value='Form 3' />
</form>
然后提交按钮的名称将在 request.POST
中,无论提交的是哪个表单:
'submit-form1' in request.POST # True if Form 1 was submitted
'submit-form2' in request.POST # True if Form 2 was submitted
'submit-form3' in request.POST # True if Form 3 was submitted
我遇到过类似的问题,我在一个模板中有多个表单,我需要知道提交了哪一个。为此,我使用了提交按钮。
假设您有这样的表格:
<form yourcode>
# ... ...
# your input fields
# ... ...
<input method="post" type="submit" name="action" class="yourclass" value="Button1" />
</form>
<form yourcode>
# ... ...
# your input fields
# ... ...
<input method="post" type="submit" name="action" class="yourclass" value="Button2" />
</form>
你可以看到那些提交按钮的区别,第一个的值是Button1,第二个是Button2
在您看来,您可以拥有这样的控件:
def yourview():
# ... ...
# Your code
# ... ...
if request.method == 'POST':
if request.POST['action'] == "Button1":
# This is the first form being submited
# Do whatever you need with first form
if request.POST['action'] == "Button2":
# This is the second form being submited
# Do whatever you need with second form
因此,您可以使用按钮的值来控制提交哪个表单。还有其他方法可以做到这一点,但这种方法更容易解决我的问题。
您也可以使用名称 属性来过滤表格