如何为多个HTML表单提供单一视图 - Django



这是我的观点。所以我想在同一视图中保留 2 个不同的 HTML 表单,但我无法这样做,因为每当我添加 1 个表单时,我都会收到其他表单为无的错误。

def home(request):
name = None
if request.method == 'POST':
name = request.POST.get('name')
choices = request.POST.get('choices')
subtest = request.POST.get('subtest')
reference = request.POST.get('reference')
unit = request.POST.get('unit')
test = Test()
test.name = name
test.save()
subtest = Subtest()
subtest.test = Test.objects.get(name=choices)
subtest.name = subtest
subtest.unit = unit
subtest.reference_value = reference
subtest.save()
# print(name)
return redirect('home')
return render(request,'main.html',{}) 

我有 2 种不同的形式.我没有使用django表单,因为我想尝试一些新的东西。

我的第一份表格

<form method="POST">
{% csrf_token %}
<div class="icon-holder">
<i data-modal-target="test-popup" class="icon-cross"></i>
</div>
<div class="input-group">
<input type="text" name="name" placeholder="Test name" />
</div>
<div class="button-group">
<button type="submit">Submit</button>
</div>
</form>

我的第二种形式

<form method="POST">
{% csrf_token %}
<div class="icon-holder">
<i data-modal-target="menu-test-popup" class="icon-cross"></i>
</div>
<div class="input-group">
<label for="test-select">Test Name:</label>
<select name="choices" id="test-select">
{% for test in test %}
<option value="{{test.name}}" name='choices'>{{test.name|title}}</option>
{% endfor %}
</select>
</div>
<div class="input-group">
<input type="text" name="subtest" placeholder="SubTest name" />
</div>
<div class="input-group">
<input type="text" name="reference" placeholder="Reference rate" />
</div>
<div class="input-group">
<input type="text" name="unit" placeholder="Unit" />
</div>
<div class="button-group">
<button type="submit">Submit</button>
</div>
</form>

第一种形式

<form method="POST">
...
<input name="form_type" value="first-form" type="hidden">
</form>

第二种形式

<form method="POST">
...
<input name="form_type" value="second-form" type="hidden">
</form>

查看功能

def view(request):
if method == "POST":
form_type = request.POST.get('form_type')
if form_type == "first-form":
# first form's process
elif form_type == "second-form":  
#second form's process

您这里有两个表单,当您提交第二个表单时,只会提交第二个表单中的字段。

所以从这条线

name = request.POST.get('name')

名称将变为"无"。但我相信您的测试模型不会为名称字段采用任何 None 值(您的原因" 完整性错误在/NOT NULL 约束失败:lab_test.name"(。

要解决此问题,请首先检查"name"是否有任何值,然后继续创建测试实例

if name:
test = Test()
test.name = name
test.save()

同样,在创建和保存实例之前,请检查第二个表单是否存在其他字段。

最新更新