长话短说,我正在使用多态模型和一些我无法正常执行的查询,因此我必须将查询结果转换为正常列表。然后使用分页器对结果进行分页。
为了正确看待事情,通常我们会这样做:
instances = Model.objects.filter(field=True)
Paginator(instances, 10).page(1)
就我而言:
instances = [x for x in Model.objects.filter(field=True)]
Paginator(instances, 10).page(1)
鉴于 ORM 是惰性的,因此通常在分页时,原始查询将具有 OFFSET 和 LIMITS 这使得查询非常轻量级。但在我的情况下,由于我正在循环查询结果,我实际上是在为所有实例访问数据库,然后应用分页。
我试图通过打印来阅读原始查询,connection.queries
但多态模型查询读起来有点头疼。
所以希望这对于任何了解 django ORM 的人来说都是一个快速的问题。
编辑
对于任何好奇我为什么需要转换为列表的人,请查看此链接并查找我的问题https://github.com/bconstantin/django_polymorphic/issues/19我的解决方法是循环循环中的标签和过滤器如下:
_items = []
for tag in tags:
for item in items.filter(tags__slug = tag):
# get unique items
if item not in _items:
_items.append(item)
# sadly the following doesn't work due to polymorphic query limitation
# _items = None
# for item in items.filter(tags__slug = tag):
# _items = _items | items.filter(tags__slug = tag)