【问题标题】:Negate a Q object in Django在 Django 中否定一个 Q 对象
【发布时间】:2014-03-04 09:42:23
【问题描述】:

我有一个动态创建的复杂 Q 对象。如何否定 Q 对象,以便它可以在filter() 中使用而不是exclude()

【问题讨论】:

    标签: python django django-q


    【解决方案1】:

    使用~ 运算符:

    complex_condition = ~Q(....)
    

    根据Complex lookups with Q objects

    Q 对象可以使用 ~ 操作符 取反,允许组合 结合了普通查询和否定 (NOT) 查询的查找

    【讨论】:

    【解决方案2】:

    感谢@falsetru。

    我正在尝试通过另一个否定的 Q 对象运行 Q 对象:

    ~Q(Q)
    

    【讨论】:

      【解决方案3】:

      如果您不能使用 ~ 运算符,例如 ~Q(**filters) - 请使用 operator.inv(q)

      import operator
      negated_q = operator.inv(query)
      

      使用示例

      q_filter = Q(user__profile_id=777)
      >> (AND: ('user__profile_id', 777))
      
      negated_q_filter = operator.inv(q_filter)
      >> (NOT (AND: ('user__profile_id', 777)))
      

      【讨论】:

        猜你喜欢
        • 2015-04-13
        • 2011-04-04
        • 2013-05-30
        • 1970-01-01
        • 2012-10-16
        • 2015-01-22
        • 2015-03-14
        • 2014-10-11
        • 1970-01-01
        相关资源
        最近更新 更多