【发布时间】:2013-05-31 19:23:21
【问题描述】:
使用普通的 Django 查询集,如果我想检索“a”属性为 1、2 或 3 的所有 myObjects,我会执行以下操作:
myObjects.objects.filter(a_in=[1,2,3])
但我想使用 Q 对象来做到这一点。如何使用 Q 对象编写等效查询?
【问题讨论】:
-
不得不问,如果它与
_in合作,为什么要与Q合作? -
在我看来,它应该可以立即工作。怎么了?
-
好问题。在我的代码中,我对所有数据库访问都使用了常规查询集。然而,一些查询变得过于复杂,需要“或”操作,所以我不得不将它们切换到 Q 对象。为了可维护性和统一性,我想对所有数据库访问使用相同的技术。所以现在我用 Q 对象替换我所有的查询集。这还不够充分吗?
-
嗯,不,这不是一个很好的理由,它不会增加任何可维护性。这是一个修复没有损坏的东西的案例。由于
Q对象的约定(正如您发现的那样,它对 or 查询很有用,因为大多数默认 API 是“和”查询)。