如何在过滤器内使用“或”

时间:2013-11-30 19:09:40

标签: python django filter views

我想进行搜索,但我需要提供状态为已取消或已修改的寄存器。

我认为这会起作用,但它没有

citasotras = citas_agendarcita.objects.filter(cita_agendar_status="Modificada" or "",citas_tipodepaciente="mediexcel")

2 个答案:

答案 0 :(得分:4)

在您的示例中,表达式"Modificada" or ""的计算结果为"Modificada"

>>> "Modificada" or ""
'Modificada'

因此,您的示例就好像您只是:

citasotras = citas_agendarcita.objects.filter(cita_agendar_status="Modificada", citas_tipodepaciente="mediexcel")

您想要cita_agendar_status等于列表["Modificada", ""]中任何项目的任何对象。您可以使用__in执行此操作:

citasotras = citas_agendarcita.objects.filter(cita_agendar_status__in=["Modificada", ""] ,citas_tipodepaciente="mediexcel")

有关详细信息,请参阅Django docs

答案 1 :(得分:1)

对于AND / OR条件Q objects可以使用:

citas_agendarcita.objects.filter(Q(cita_agendar_status="Modificada")|Q(cita_agendar_status=""), \                               
                                 citas_tipodepaciente="mediexcel")