2016-11-16 115 views
1

有一个视图代码:Django的查询集切片使得许多数据库查询

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. Queryset是懒惰的。至于减少到一个查询?

回答

2

先评估查询集,然后在再次对其进行切片之前将其转换为列表。

posts = list(posts) 
right_now = ... 
+0

谢谢丹尼尔,它的工作原理! –