Django如何在一个提交请求中保存同一个模型表单两次

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):

我是Django的新手,我试图在我的views.py中保存一个模型表单两次,因为我想在DB中创建两个不同的行。我可以保存表单并在DB中创建两行,但不幸的是,第二个表单的值保存在两行中。 单击一次submit按钮,我想为同一型号保存两个不同的行

我已经浏览了这些帖子,但是它没有回答我的问题,因为我想保存同一个模型表单两次

以下是我保存表单的功能:

@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')