【发布时间】:2014-03-04 09:42:23
【问题描述】:
我有一个动态创建的复杂 Q 对象。如何否定 Q 对象,以便它可以在filter() 中使用而不是exclude()?
【问题讨论】:
我有一个动态创建的复杂 Q 对象。如何否定 Q 对象,以便它可以在filter() 中使用而不是exclude()?
【问题讨论】:
使用~ 运算符:
complex_condition = ~Q(....)
根据Complex lookups with Q objects:
Q对象可以使用 ~ 操作符 取反,允许组合 结合了普通查询和否定 (NOT) 查询的查找
【讨论】:
operator.not_(x) 类似于not x。使用operator.inv(x) 或oeprator.invert 表示~x。抱歉迟到(太迟)回复。 docs.python.org/3/library/operator.html#operator.inv
感谢@falsetru。
我正在尝试通过另一个否定的 Q 对象运行 Q 对象:
~Q(Q)
【讨论】:
如果您不能使用 ~ 运算符,例如 ~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)))
【讨论】: