8

我有一个 Django QuerySet,我想从中取出一个Q对象。(即包含与该查询集完全相同的查询。)

那可能吗?如果是这样,怎么办?

4

3 回答 3

5

不,但您可以先创建 Q 对象,然后使用它;或者,将您的查询创建为 dict,并将其传递给您的过滤器方法和 Q 对象。

于 2012-03-14T14:11:22.333 回答
4

这不完全是您所要求的,但您可以通过访问查询成员从查询集中提取 sql。例如:

x = somequeryset.query

然后您可以在新的查询集对象上使用它来重建原始查询集。这可以更好地保存为查询集定义的“值”之类的内容。定义的 x 易于存储。我过去曾使用它来保存用户构建的查询/搜索,然后每天运行这些查询/搜索,并将结果通过电子邮件发送给用户。

于 2012-03-15T01:14:21.843 回答
1

如果您想要 Q 对象,那么您可以通过 ORing 另一个 Q 对象来重建复杂的查询,这也是相关的,如果两个 QuerySet 在同一模型上,您可以直接 OR QuerySet 以获得相同的效果。值得尝试并在之前和之后检查 SQL。

例如:

qs1 = model.objects.filter(...)
print("qs1: {}".format(qs1.query)
qs2 = model.objects.filter(...)
print("qs2: {}".format(qs1.query)
qs = q1 | q2
print("qs: {}".format(qs.query)

我当然找到了您的问题,因为出于这个原因我想要查询中的 Q 对象,并在 Django 用户组中发现:

https://groups.google.com/d/msg/django-users/2BuFFMDL0VI/dIih2WRKAgAJ

QuerySet 的组合方式与 Q 对象的组合方式非常相似。

这可能对您有帮助,也可能对您没有帮助,这当然取决于您想要 Q 对象的原因。

于 2018-03-16T03:40:25.553 回答