0

长话短说,我正在使用多态模型和一些我无法正常执行的查询,因此我必须将查询结果转换为正常列表。然后使用分页器对结果进行分页。

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

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)
4

0 回答 0