我正在尝试比较 django 的 Q objects它们的组成方式完全相同。
但是尽管所有 child 和他们之间的关系都相同,但他们并不被视为平等。
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 对象的相等性。我们可以直接使用 repo 中的代码。
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
关于python - Django 的 Q 对象的相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47864573/