Django的Q对象的平等

我想比较django的Q objects,它们以完全相同的方式组成。Django的Q对象的平等

尽管所有的孩子和他们之间的关系是相同的,他们并不相同。

from django.db.models import Q 

$ q1 = Q(a=1) & Q(b=1) & Q(c=1)

$ q2 = Q(a=1) & Q(b=1) & Q(c=1)

$ q1 == q2

$ False

这是我的单元测试中构建问题的地方,我使用Q对象为我的查询集构建了过滤器。

为什么两个Q对象不相等?

我正在使用Django 1.11。

回答:

Django < = 1.11.x没有为Q对象实现__eq__方法。 可以看出here。

Django> = 2.0为Q对象实现__eq__方法。 Code。

因此,在Django 2.0之前不可能直接检查两个Q对象的相等性。

但是可以编写一个简单的函数来检查Q对象的相等性。我们可以直接使用回购代码。

def compare_q(q1 , q2): 

return (

q1.__class__ == q2.__class__ and

(q1.connector, q1.negated) == (q2.connector, q2.negated) and

q1.children == q2.children

)

所以,对于老版本的Django的,我们可以这样做:

$ compare_q(q1 , q2) 

$ True

以上是 Django的Q对象的平等 的全部内容, 来源链接: utcz.com/qa/261729.html

回到顶部