【发布时间】:2013-12-16 18:05:18
【问题描述】:
我想搜索,但需要带状态为Canceled或Modified的寄存器。
我认为这会起作用,但它没有
citasotras = citas_agendarcita.objects.filter(cita_agendar_status="Modificada" or "",citas_tipodepaciente="mediexcel")
【问题讨论】:
标签: python django filter views
我想搜索,但需要带状态为Canceled或Modified的寄存器。
我认为这会起作用,但它没有
citasotras = citas_agendarcita.objects.filter(cita_agendar_status="Modificada" or "",citas_tipodepaciente="mediexcel")
【问题讨论】:
标签: python django filter views
对于 AND/OR 条件,可以使用Q objects:
citas_agendarcita.objects.filter(Q(cita_agendar_status="Modificada")|Q(cita_agendar_status=""), \
citas_tipodepaciente="mediexcel")
【讨论】:
Q 对象方法在您需要或一起约束不同字段时很有用,但我认为cita_agendar_status 的__in 语法更清晰。你的两个Q 对象citas_tipodepaciente 是相同的,除非我忽略了某些东西。
__in 是这里更好的选择。顺便说一句,修复了citas_tipodepaciente 的东西,实际上误读了 OP 的代码。
在您的示例中,表达式 "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 了解更多信息。
【讨论】: