Django Queryset slice 对数据库进行多次查询

Django Queryset slice makes many queries to the database

有查看码:

posts = category.category_posts.filter(
    ~Q(pk=id),
    date_published__lte=timezone.now(),
    is_active=True).order_by('-date_published')[:19]

right_now = posts[:5]
actual    = posts[5:10]
old_1     = posts[10:12]
old_2     = posts[12:14]
old_3     = posts[14:19]

在模板中呈现时,Django 会针对每个切片对数据库执行查询。只是 5. 查询集是惰性的。至于减少到一个查询?

首先通过将查询集转换为列表来评估查询集,然后再对其进行切片。

posts = list(posts)
right_now = ...