如何在一个页面中处理两个不同的表单?

2024-04-25 00:56:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我的模板中有多个表单。当我提交第一个表单时,第二个表单也会提交,因为它不需要必需的输入字段。当用户单击第二个表单的提交按钮时,我想提交第二个表单(id=lead_form)。我该怎么做? 批准\u page.html

// The first form
<form method="POST" enctype="multipart/form-data">
   <!-- Very Important csrf Token -->
   {% csrf_token %}
   {{ form.media }}
   {{ form|crispy }}
   <input type="hidden" name="form" value="risk" />
   <input type="submit" class="btn btn-primary btn-lg" value="Approve">
</form>
// The second form
<form method="POST" enctype="multipart/form-data"
   class="lead_form"
   id="lead_form"
   >
   <!-- Very Important csrf Token -->
   {% csrf_token %}
   {{ form_approval.media }}
   {{ form_approval|crispy }}
   <input type="hidden" name="rank_name" value="{{ waiting.rank.rank_name }}" />
   <button type="submit" class="btn btn-success btn-xs">
   Submit
   </button>
</form>

视图.py

def approval_page(request, id):

    current_user = request.user
    userP = UserProfile.objects.get_or_create(username=current_user)
    pdf = get_object_or_404(Pdf, id=id)
    ....
    if request.method == 'POST' and request.POST.get('form') == 'risk':
        form = PdfRiskForm(request.POST, request.FILES, instance=pdf)
        if form.is_valid():
            this_pdf = form.save()
            this_pdf.save()
    else:
        form = PdfRiskForm()
     ...
    form_approval = LeadApprovalForm(request.POST)
    if request.method == 'POST':
        if form_approval.is_valid():
            lead_approval = form_approval.save()
            lead_approval.user = request.user
            lead_approval.approval_id = approval
            lead_approval.rank = request.POST.get('rank_name', None)
            lead_approval.save()
        else:
            form_approval = LeadApprovalForm()

    context = {
         'form': form,
         'form_approval': form_approval
          ....
    }
    return render(request, 'approval_page.html', context)

forms.py

class LeadApprovalForm(forms.ModelForm):

    class Meta:
        model = LeadApprovals
        fields = ()

class PdfRiskForm(forms.ModelForm):
    risk_rating = forms.ChoiceField(label='Risk Rating', choices=RISK_RATING)
    credit_limit = forms.IntegerField()
    comments = RichTextField
    letter_portion = forms.IntegerField(min_value=0, max_value=100, required=False, label="Guarantee Portion (%)")

    class Meta:
        model = Pdf
        fields = ['risk_rating', 'credit_limit', 'currency_choice', 'letter_portion', 'comments']