如何在Django中的同一页面上插入2个不同的表单

时间:2010-05-03 13:25:22

标签: django django-forms

我必须在同一页面中插入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个表单?

6 个答案:

答案 0 :(得分:5)

您也可以这样做,

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

CODE

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

答案 1 :(得分:3)

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

e.g。在您的页面上:

<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()视图函数,它将处理每个表单。

答案 2 :(得分:2)

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

模板中的

表单是这样的:

<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&amp; secondform进行处理。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

 <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 /