长话短说,我使用多态模型和一些我不能正常做的查询,所以我必须将查询结果转换为普通列表。然后使用分页器来分页结果。
为了正确看待事情,通常我们会这样做:
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)