Python django视图中POST请求中的多个值不起作用

Python django视图中POST请求中的多个值不起作用,python,django,forms,post,request,Python,Django,Forms,Post,Request,我有三个不同的按钮用于不同的目的(从表中插入和删除),每个按钮在POST中处理不同的值。我设法用我的手做了一次 if request.method==“POST”和request.POST.get(“按钮的名称”)==“按钮的值” 但是,当我把同样的想法再次用于不同的按钮时,它就是不起作用。每个条件中的代码都运行良好,只是在添加第二个条件时没有进入if 视图.py def listpolls(request): #mysql connection here# form = A

我有三个不同的按钮用于不同的目的(从表中插入和删除),每个按钮在POST中处理不同的值。我设法用我的手做了一次

if request.method==“POST”和request.POST.get(“按钮的名称”)==“按钮的值”

但是,当我把同样的想法再次用于不同的按钮时,它就是不起作用。每个条件中的代码都运行良好,只是在添加第二个条件时没有进入if

视图.py

def listpolls(request):

    #mysql connection here#

    form = AddPollForm()
    form_del = DelPollForm()

    if request.method == 'POST' and request.POST.get("btn_add_name", "") == 'btn_add_val':

        form = AddPollForm(request.POST)
        form_del = DelPollForm(request.POST)

        if form.is_valid():

            ip = form.cleaned_data['poll_ip']
            #poll_time = form.... etc

            #whatever you want to do here#

            return HttpResponseRedirect('listpolls.html')

        else:

            return render_to_response("listpolls.html",{"buffer_data": b, 'form': form, 'form_del': form_del} )        

    elif request.method == 'POST':

         #whatever you want to do here#

        return HttpResponseRedirect('listpolls.html')

    elif request.method == 'POST' and request.POST.get("btn_delbyip_name", "") == 'btn_delbyip_val':

         #whatever you want to do here#

            return HttpResponseRedirect('listpolls.html')

        else:

            return HttpResponseRedirect('listpolls.html')   

    else:
        return render_to_response("listpolls.html",{"buffer_data": b, 'form': form, 'form_del': form_del} )
模板

<form action="/services/listpolls/" method="post">{% csrf_token %}

    {{ form }}

    <button type="submit" value="btn_add_val" name="btn_add_name">Añadir</button>

</form> 

<form action="/services/listpolls/" method="post">{% csrf_token %}

    {{ form_del }}

   <button type="submit" value="btn_delbyip_val" name="btn_delbyip_name">Borrar por IP</button>

   </form>

    <form action="/services/listpolls/" method="post">{% csrf_token %}
           <button type="submit" value="{{b.id}}" name="btn_borrar" class="delete_poll">Borrar</button>
         </form>
{%csrf\u令牌%}
{{form}}
阿尼亚迪尔
{%csrf_令牌%}
{{form_del}}
博拉尔·波尔·伊普
{%csrf_令牌%}
博拉尔

这是一个简单的逻辑错误。如果操作是POST,但按钮不是“btn_add_val”,则第一个elif会捕获每个情况。如果您想捕获“btn\u delbyip\u name”,您应该将其移动到该elif之前。

删除所有不相关的代码后,您的“If”逻辑结构如下:

def listpolls(request):

    if request.method == 'POST' and request.POST.get("btn_add_name", "") == 'btn_add_val':
        pass
    elif request.method == 'POST':
        pass
    elif request.method == 'POST' and request.POST.get("btn_delbyip_name", "") == 'btn_delbyip_val':
        pass
    else:
        pass
解释这一结构: 首先,if将检查请求是否为POST,以及某些POST参数是否具有所需的值。如果是的话,它将计算出一些东西并留下整个结构。如果没有,它将继续到下一个elif

第二个将检查请求是否为POST。如果是的话,它将计算出一些东西并留下整个结构。如果没有,它将继续到下一个elif

第三个将检查请求是否为POST,以及某些POST参数是否具有所需的值。如果是的话,它将计算出一些东西并留下整个结构。如果没有,它将继续向其他国家提供援助

Else将计算一些东西,并留下if的结构


现在我们可以清楚地看到这里发生了什么,如果第一个条件不是真的,而这是post请求,那么第二个条件将始终是真的!所以第三个条件甚至不会被检查。您只需交换第二个和第三个条件(附带完整的代码),它就可以工作。

是的,我刚刚注意到删除了所有不必要的代码并专注于此,谢谢!!