簡體   English   中英

Django,如何在一頁中添加兩個表單?

[英]Django, How to add two form in one page?

我是 Django 的新手,我的問題很簡單。 如何在同一頁面中添加兩個表單? 我嘗試了很多方法,例如在視圖中創建一個類或添加第二個 urls 路徑,但沒有找到方法。 謝謝你的幫助

這是我的代碼:

表格.py

class scrap_info(forms.Form):
    url = forms.CharField(label="Urls")
    website = forms.ChoiceField(label="Website", choices=ask_website)


class sms_info(forms.Form):
    data = forms.ChoiceField(label="Data list", choices=ask_data)
    number = forms.CharField(label="Sms number")

視圖.py

def scrap_app(request):
    form1 = scrap_info(request.POST or None)

    return render(request, "sms/scrap_app.html", {'form1': form1})


def sms_app(request):
    form2 = sms_info(request.POST or None)

    return render(request, "sms/sms_app.html", {"form2": form2})

scrap_app.html

<body>
<div>
    <form method="POST">
        {% csrf_token %}
        {{ form|crispy }}
        <button class="btn btn-outline-info" type="submit" value="Save">SCRAP</button>

    </form>
</div>
</body>

網址.py

urlpatterns = [
    path("/scrap_app", views.scrap_app, name="scrap_app"),
]

我最近遇到了這個問題,我通過在每個表單上添加一個隱藏字段並通過在視圖中使用 if 條件獲取該隱藏值來確定提交了什么表單來解決它

這是我如何使用 CBV 做到的。

視圖.py

class ContactUsView(TemplateView):
    template_name = 'yourtemplate.html'

    def get(self, request, *args, **kwargs):
        inquiry_form = InquiryForm(self.request.GET or None, prefix='inquiry_form')
        complaint_form = ComplaintForm(self.request.GET or None, prefix='complaint_form')
        context = self.get_context_data(**kwargs)
        context['complaint_form'] = complaint_form
        context['inquiry_form'] = inquiry_form
        return self.render_to_response(context)

    def post(self, request):
        # instantiate all unique forms (using prefix) as unbound
        inquiry_form = InquiryForm(prefix='inquiry_form')
        complaint_form = ComplaintForm(prefix='complaint_form')

        # determine which form is submitting (based on hidden input called 'action')
        action = self.request.POST['action']

        # bind to POST and process the correct form
        if action == 'inquiry':
            inquiry_form = InquiryForm(data=request.POST, prefix='inquiry_form')
            if inquiry_form.is_valid():
                # Your logic here
                return self.render_to_response(
                    self.get_context_data(
                        inquiry_form=inquiry_form,
                        complaint_form=complaint_form,
                    )
                )
            messages.error(self.request,
                           'Inquiry form is invalid.')

        elif action == 'complaint':
            complaint_form = ComplaintForm(data=request.POST, prefix='complaint_form')
            if complaint_form.is_valid():
                # Your logic here
                return self.render_to_response(
                    self.get_context_data(
                        inquiry_form=inquiry_form,
                        complaint_form=complaint_form,
                    )
                )
            messages.error(self.request,
                           'Complaint form is invalid.')

        # prep context
        context = {
            'inquiry_form': inquiry_form,
            'complaint_form': complaint_form,
        }
        return render(request, self.template_name, context)

你的模板.html

<!-- First Form -->
<form action="" method="post" role="form">
    {% csrf_token %}
    <input type='hidden' name='action' value='inquiry'>
    {{ form1 }}
    <button type="submit" title="Send Inquiry">Send Inquiry</button>
</form>

<!-- Second Form -->
<form action="" method="post" role="form">
    {% csrf_token %}
    <input type='hidden' name='action' value='complaint'>
    {{ form2 }}
    <button type="submit" title="Send Complaint">Send Complaint</button>
</form>

正如您所看到的,每個表單中都有一個名為“ action ”的隱藏值,它將用於確定提交的是哪個表單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM