xss*_*han 4 python django django-models
我正在尝试以完全相同的方式比较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
Run Code Online (Sandbox Code Playgroud)
这在我的单元测试中构成了问题,在该单元测试中,我使用Q对象为查询集构建了过滤器。
为什么两个Q对象不相等?
我正在使用Django 1.11。
Django <= 1.11.x未实现__eq__Q对象的方法。从这里可以看出。
Django> = 2.0实现__eq__Q对象的方法。代码。
因此,不可能在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
)
Run Code Online (Sandbox Code Playgroud)
因此,对于旧版本的Django,我们可以执行以下操作:
$ compare_q(q1 , q2)
$ True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
458 次 |
| 最近记录: |