在Django中否定Q对象

时间:2014-02-07 05:21:05

标签: python django django-q

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

3 个答案:

答案 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)))