也许标题有点令人困惑,英语不是我的主要语言。我为此道歉。 重点:我有一个客户表可以是活动的,也可以是活动的,简单的字段表示“是”或“否”。所以在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指出它。
答案 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")
'0'
(cero 字符串)'Si'
'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'):