首页 > 解决方案 > Django:将 3 个单独的“过滤器()”组合成单个查询

问题描述

我有以下代码

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

most_popular如您所见,对 5 个 latestcoming_soonrecentproducts有 3 个单独的调用。有没有办法减少数据库调用的次数?

我想构建单个查询,例如,

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

有任何想法吗?谢谢

标签: pythondjangodjango-orm

解决方案


我不这么认为.. 但是您可以使用一个查询集并从中过滤。

IE

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)

推荐阅读