我有一个动态创建的复杂Q对象。如何否定Q对象以便可以在filter()
而不是exclude()
中使用它?
答案 0 :(得分:8)
使用~
运算符:
complex_condition = ~Q(....)
根据Complex lookups with Q objects:
使用〜运算符可以取消
Q
个对象,允许合并 查找结合了普通查询和否定(NOT)查询
答案 1 :(得分:0)
谢谢@falsetru。
我尝试的是通过另一个否定的Q对象运行Q对象:
~Q(Q)
答案 2 :(得分:0)
如果您不能使用像{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)))