【问题标题】:How insert 2 different forms on the same page in Django如何在 Django 的同一页面上插入 2 个不同的表单
【发布时间】:2016-09-15 21:05:54
【问题描述】:

我必须在同一页面中插入 2 个表单:

1) 报名表

2) 登录表单

.

所以如果我在views.py中使用它:

    if request.method == 'POST':

        form = registrationForm(request.POST) 
        if form.is_valid():  
            form.save()    
            return render_to_response('template.html', {
    'form': form,
})

提交两种表格之一会出错。

如何区分视图中提交的 2 个表单?

【问题讨论】:

标签: django django-forms


【解决方案1】:

你也可以这样做,

 <form method='POST'>
    {{form1.as_p}}
    <button type="submit" name="btnform1">Save Changes</button>
    </form>
    <form method='POST'>
    {{form2.as_p}}
    <button type="submit" name="btnform2">Save Changes</button>
    </form>

代码

if request.method=='POST' and 'btnform1' in request.POST:
    do something...
if request.method=='POST' and 'btnform2' in request.POST:
    do something...

【讨论】:

  • 谁会想要 2 个提交按钮?
【解决方案2】:

您可以在同一页面上提交两个表单...但是每个表单调用的操作(即处理每个表单的视图函数)可能应该不同。这样,您就不必尝试区分这些形式。

例如在您的页面上:

<form id="login_form" action="{% url app.views.login %}" method="post">

   ...form fields...

</form>

<form id="registration_form" action="{% url app.views.registration %}" method="post">

   ...form fields...

</form>

因此,在views.py 中,您将拥有一个login() 视图函数和一个registration() 视图函数来处理这些表单中的每一个。

【讨论】:

    【解决方案3】:
     <form action="Page where u want to post the data" method="post">
        <input name="edit" type="submit" value="Edit Client">
        <input name="delete" type="submit" value="Delete Client">
     </form>
    

    只需给按钮起不同的名称。

    if request.method == "POST" and 'edit' in request.POST:
     / Do /
    if request.method == "POST" and 'delete' in request.POST:
     /Do /
    

    【讨论】:

      【解决方案4】:

      您也可以将两种表单发布到同一个网址:

      模板中的表格是这样的:

      <form method="post" action="/profile/">
      {% for field in firstform %}
          <div class="mb10">
          <div class="fl desc">{{ field.label_tag }}<br />
          <div class="fr">{{ field }}{{ field.errors }}</div>
          <div class="clear"></div>
          </div>  
      {% endfor %}
      {% for field in secondform %}
          <div class="mb10">
          <div class="fl desc">{{ field.label_tag }}<br /><</div>
          <div class="fr">{{ field }}{{ field.errors }}</div>
          <div class="clear"></div>
          </div>  
      {% endfor %}
      <a class="submit fr" href="#""><img src="{{ MEDIA_URL }}img/save.png" /></a>
      </form>
      

      在视图中像这样处理它们:

      if request.method == 'POST':
          firstform = ProfileForm(request.POST, request.FILES, instance=profile)
          secondform = UserForm(request.POST, instance=request.user)
      

      然后用 firstform&secondform 做一些事情。

      【讨论】:

        【解决方案5】:

        您可以将两个表单张贴到同一个 URL,并有一个隐藏的输入,名称设置为登录或注册,然后在服务器上对其进行排序

        【讨论】:

          【解决方案6】:

          您可以对不同的 url 进行注册和登录 POST,这样每个 POST 都将由相应的视图处理

          【讨论】:

            猜你喜欢
            • 2018-08-20
            • 2016-03-26
            • 2017-04-22
            • 2020-04-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-01-19
            • 2011-06-20
            相关资源
            最近更新 更多