我有一个 Django QuerySet
,我想从中取出一个Q
对象。(即包含与该查询集完全相同的查询。)
那可能吗?如果是这样,怎么办?
我有一个 Django QuerySet
,我想从中取出一个Q
对象。(即包含与该查询集完全相同的查询。)
那可能吗?如果是这样,怎么办?
不,但您可以先创建 Q 对象,然后使用它;或者,将您的查询创建为 dict,并将其传递给您的过滤器方法和 Q 对象。
这不完全是您所要求的,但您可以通过访问查询成员从查询集中提取 sql。例如:
x = somequeryset.query
然后您可以在新的查询集对象上使用它来重建原始查询集。这可以更好地保存为查询集定义的“值”之类的内容。定义的 x 易于存储。我过去曾使用它来保存用户构建的查询/搜索,然后每天运行这些查询/搜索,并将结果通过电子邮件发送给用户。
如果您想要 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 对象的原因。