Django:独立保存表单

zin*_*non 1 html django django-forms django-views

我在同一个模板的两个不同选项卡中有两个表单。表单的模型通过外键连接。

当我尝试独立保存每个表单时,每个表单都有一个提交按钮,但不幸的是,这两个表单试图再次保存数据,即使我只按下一个提交按钮。

视图.py

def input(request):
    my_demographics = DemographicForm(request.POST or None)
    my_diagnosis = DiagnosisForm(request.POST or None)

    context = RequestContext(request)
    if request.method == 'POST':
        submitted = request.POST.get('form_id', '')

        if submitted == 'demographics':
            # Get the Form1 instance
            my_demographics = DemographicForm(request.POST)
            if my_demographics.is_valid():
                my_demographics_object= my_demographics.save()
                my_diagnosis=DiagnosisForm({'patient': my_demographics_object.patient_id})


        elif submitted == 'diagnosis':
            # Get the Form2 instance
            my_diagnosis = DiagnosisForm(request.POST)
            if my_diagnosis.is_valid():
                my_diagnosis.save()

        else:
            raise ValueError('No form specified !')


return render_to_response('input.html', {'frm':my_demographics, 'frm_d': my_diagnosis}, context)
Run Code Online (Sandbox Code Playgroud)

输入.html

<div class="tab-content">

    <!-- Tab panes -->
    <form class="tab-pane fade in active" id="demographics" method="post" >
        <input type="hidden" name="form_id" value="demographics">
        {%crispy frm%}
    </form>
    <form class="tab-pane fade" id="diagnosis" method="post">
         <input type="hidden" name="form_id" value="diagnosis">
        {%crispy frm_d%}
    </form>
</div>
Run Code Online (Sandbox Code Playgroud)

bru*_*ers 5

首先在您的每个表单中添加一个隐藏输入,这将指定发布哪个表单:

<div class="tab-content">

    <!-- Tab panes -->
    <form class="tab-pane fade in active" id="demographics" method="post" >
        <input type="hidden" name="form_id" value="demographics"> 
        {%crispy frm%}
    </form>
    <form class="tab-pane fade" id="diagnosis" method="post">
        <input type="hidden" name="form_id" value="diagnosis"> 
        {%crispy frm_d%}
    </form>
</div>
Run Code Online (Sandbox Code Playgroud)

然后在您的视图中,检查已发布的表单并仅保存此表单。

编辑:

def input(request):
    context = RequestContext(request)
    if request.method == 'POST':
        submitted = request.POST.get('form_id', '')

        if submitted == 'demographics':
            # Get the Form1 instance
            my_demographics = DemographicForm(request.POST)
            if my_demographics.is_valid():
                my_demographics_object= my_demographics.save()
                my_diagnosis=DiagnosisForm({'patient': my_demographics_object.patient_id})
             else:
                my_diagnosis=DiagnosisForm()

        elif submitted == 'diagnosis':
            # Get the Form2 instance
            my_diagnosis = DiagnosisForm(request.POST)
            if my_diagnosis.is_valid():
                my_diagnosis.save()
                # here you should redirect

            my_demographics = DemographicForm()

        else:
            raise ValueError('No form specified !')

    else:
        my_demographics = DemographicForm()
        my_diagnosis = DiagnosisForm()

    return render_to_response(
        'input.html', 
         {'frm':my_demographics, 'frm_d': my_diagnosis}, 
         context
         )
Run Code Online (Sandbox Code Playgroud)