【问题标题】:How to use an "or" inside a filter如何在过滤器中使用“或”
【发布时间】: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


    【解决方案1】:

    对于 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 是相同的,除非我忽略了某些东西。
    • @PeterDeGlopper 我同意__in 是这里更好的选择。顺便说一句,修复了citas_tipodepaciente 的东西,实际上误读了 OP 的代码。
    【解决方案2】:

    在您的示例中,表达式 "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 了解更多信息。

    【讨论】:

      猜你喜欢
      • 2016-01-14
      • 2017-09-01
      • 2012-06-29
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      • 2010-10-26
      • 2020-12-08
      • 2019-09-25
      相关资源
      最近更新 更多