Django queryset在if之后变为空,但它不应该

时间:2018-03-26 18:29:06

标签: html django

也许标题有点令人困惑,英语不是我的主要语言。我为此道歉。 重点:我有一个客户表可以是活动的,也可以是活动的,简单的字段表示“是”或“否”。所以在html表单中我有一个Select输入,有3个选项:Indifferent(所有客户端,值为0),yes(活动客户端,值为'yes'),no(不活动,值为'no')。

问题是,当我想要获取所有客户端(活动和非活动)时,由于我不理解的原因,查询集变空。

这是html表单的一部分:

<select name="ClienteActivo">
<option value="0" selected="selected">Indiferente</option>
<option value="Si">Si</option>
<option value="No">No</option>
</select>

这是观点:

def resultadosClienteAvanzadoView(request):

    #Here I retrieve all clients.
    clientes=ClientesCompradores.objects.all()

    #Active can be 0, yes or no. 0 means both, so no filter.
    active=request.GET.get('ClienteActivo')

    #If activo is not 0 then filter the clients.
    if active != 0:
        clientes=clientes.filter(nulo=active)

    #Create the context. Again, when active is 0 i want all the clients.
    context={
        'clientes':clientes,
        'cantidad':len(clientes)
    }
    return render(request,'catalog/resultadosClienteAvanzado.html',context)

如果有人需要更多信息我提供它没有问题。

我确信这是一个新手的错误,因为我还在学习Django。

EDIT1:

django模型中的nulo是这样的:

nulo = models.CharField(max_length=10, blank=True, null=True)

这是一个传统的数据库,我正在使用它实际上是一个痛苦的屁股:/

提前致谢!

Edit2:

中有拼写错误
<option value="0" selected="selected">Indiferente</option>

该值实际为0

Edit3:毕竟它是因为我将0评估为int而不是字符串。感谢Gytree指出它。

2 个答案:

答案 0 :(得分:0)

假设nulo是Django BooleanField,请使用以下命令:

if active == 'Si':
    clientes = clientes.filter(nulo=True)
elif active == 'No':
    clientes = clientes.filter(nulo=False)

答案 1 :(得分:0)

RUNING:

active = request.GET.get("ClienteActivo")
  • 如果用户选择&#39; Indiferente&#39;活动为'0'(cero 字符串
  • 如果是用户 选择&#39; Si&#39;活动为'Si'
  • 如果用户选择“否”&#39;该 有效是'No'

然后当你问

active != 0:总是真正的beacouse antive olny可以获得价值(&#39; 0&#39;,&#39; No&#39;,&#39; Si&#39;)

然后当python创建queryset时使用nulo = '0'并且你没有注册nulo == '0'

然后过滤器最多:

if active != '0' 

if active in ('No', 'Si'):