2016-11-16 4 views
1

есть код вида:Джанго QuerySet срез делает много запросов к базе данных

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

Спасибо, Даниэль, это работает! –