Django: объединить 3 отдельных фильтра () в один запрос - PullRequest
0 голосов
/ 05 июня 2018

У меня есть следующий фрагмент кода

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    prefetch = ['vendor', 'picture']
    context['most_popular_products'] = Product.objects.filter(is_popular=True)[:5].prefetch_related(*prefetch)
    context['coming_soon_products'] = Product.objects.filter(is_coming_soon=True)[:5].prefetch_related(*prefetch)
    context['recent_products'] = Product.objects.all()[:5].prefetch_related(*prefetch)
    return context

Как вы видите, есть 3 отдельных вызова для 5 последних most_popular, coming_soon и recent продуктов.Есть ли способ уменьшить количество обращений к базе данных?

Я хотел бы построить один запрос, например,

popular, coming_soon, recent = Product.objects.filter...and.so.on

Есть идеи?спасибо

1 Ответ

0 голосов
/ 05 июня 2018

Я так не думаю .. Но вы можете использовать один набор запросов и отфильтровать его.

т.е.

products = Product.objects.all()
recent_products = products[:5]
coming_soon_products = products.filter(is_coming_soon=True)
most_popular_products = porducts.filter(is_popular=True)
...