使用具有普通列表的paginator时的django ORM性能

时间:2013-06-11 08:04:27

标签: django orm

长话短说,我使用多态模型和一些我不能正常做的查询,所以我必须将查询结果转换为普通列表。然后使用分页器来分页结果。

为了正确看待事情,通常我们会这样做:

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)

0 个答案:

没有答案