2016-11-16 118 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

謝謝丹尼爾,它的工作原理! –