Django如何在一个提交请求中保存同一个模型表单两次
我是Django的新手,我试图在我的views.py中保存一个模型表单两次,因为我想在DB中创建两个不同的行。我可以保存表单并在DB中创建两行,但不幸的是,第二个表单的值保存在两行中。 单击一次submit按钮,我想为同一型号保存两个不同的行 我已经浏览了这些帖子,但是它没有回答我的问题,因为我想保存同一个模型表单两次 以下是我保存表单的功能:Django如何在一个提交请求中保存同一个模型表单两次,django,django-admin,django-views,django-forms,Django,Django Admin,Django Views,Django Forms,我是Django的新手,我试图在我的views.py中保存一个模型表单两次,因为我想在DB中创建两个不同的行。我可以保存表单并在DB中创建两行,但不幸的是,第二个表单的值保存在两行中。 单击一次submit按钮,我想为同一型号保存两个不同的行 我已经浏览了这些帖子,但是它没有回答我的问题,因为我想保存同一个模型表单两次 以下是我保存表单的功能: @csrf_protect @login_required @never_cache def testQuotaReq(request):
@csrf_protect
@login_required
@never_cache
def testQuotaReq(request):
form1 = quotaRequestForm(request.POST or None)
form2 = quotaRequestForm(request.POST or None)
if form1.is_valid() and form2.is_valid():
form1.process()
save1 = form1.save(commit=True)
save1.save()
form2.process()
save2 = form2.save(commit=True)
save2.save()
return HttpResponse("Form1 Form2 saved")
#else:
# return HttpResponse('Thanks for your request! Your request id is: %d .' % (save1.pk) )
else:
form1 = quotaRequestForm()
form2 = quotaRequestForm()
return render_to_response('quotaRequest.html',
locals(),
context_instance=RequestContext(request))
上述代码在表中创建以下行(简化以突出显示问题):
在这里,从HTML接收到的第75行和第76行的值是不同的。73岁和74岁也是如此。我错过什么了吗?谢谢你的帮助
编辑:
HTML代码:
<form method='POST' action='' id="formSubmit"> {% csrf_token %}
<div class="form1">
{{ form1.as_p }}
</div>
<div class="form2">
{{ form2.as_p }}
</div>
<a class="btn btn-info" href="/quotaRequest">Cancel Request</a>
<button type="submit" class="btn btn-info"><b>Submit Request</b></button>
</form>
当前,您的两个表单生成具有相同名称的
input
元素,因此上一次输入的数据将为这两个表单发布
您可以指定两个唯一的前缀
e来区分表单:
form1 = quotaRequestForm(request.POST or None, prefix='form-1')
form2 = quotaRequestForm(request.POST or None, prefix='form-2')
每次实例化表单时,都需要指定正确的前缀
顺便说一句,您可能需要删除else
子句。目前,如果任何一种形式无效,数据将被擦除。如果不重置这些值,则表单将显示第一次提交时的输入,并向用户显示正确的错误消息 您好@knbk谢谢您的及时回复。但是,我无法通过使用前缀标记解决问题。事实上,现在没有任何东西被提交给DB。我正在编辑上面的代码,希望你能给我指出正确的方向。我不太清楚如何使用前缀标记来区分我的模型形式。您好@knbk,您的解决方案成功了!不知何故,前缀并没有添加到HTML中的输入元素中,但当我重新启动服务器时,一切都很好,现在我能够在数据库中为同一个modelform插入两个不同的行。非常感谢你的帮助!真的很感激!
@csrf_protect
@login_required
@never_cache
def testQuotaReq(request):
form1 = quotaRequestForm(request.POST or None, prefix="form-1")
form2 = quotaRequestForm(request.POST or None, prefix="form-2")
if form1.is_valid() and form2.is_valid():
form1.process()
save1 = form1.save(commit=True)
save1.save()
form2.process()
save2 = form2.save(commit=True)
save2.save()
return HttpResponse("Form1 Form2 saved")
# else:
# form1 = quotaRequestForm()
# form2 = quotaRequestForm()
return render_to_response('quotaRequest.html',locals(), context_instance=RequestContext(request))
form1 = quotaRequestForm(request.POST or None, prefix='form-1')
form2 = quotaRequestForm(request.POST or None, prefix='form-2')