Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:组合3个单独的';过滤器()';转换为单个查询_Python_Django_Django Orm - Fatal编程技术网

Python Django:组合3个单独的';过滤器()';转换为单个查询

Python Django:组合3个单独的';过滤器()';转换为单个查询,python,django,django-orm,Python,Django,Django Orm,我有下面的代码 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) con

我有下面的代码

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
如您所见,5款最新的
最受欢迎的
即将推出的
最新的
产品分别有3款。 有没有办法减少数据库调用的数量

我想构造一个查询,比如

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

有什么想法吗?谢谢我不这么认为。。但是您可以使用一个查询集并从中筛选

i、 e


这也将生成相同数量的查询。可能需要进行一些优化,使用.values\u list()选择最大的数据集,然后以编程方式对其进行“筛选”。会减少请求,但无论如何可能不会成功,idkI怀疑这是可能的。我想不出一个查询可以在SQL中实现这一点,因此我相信通过Django ORM也不可能实现同样的功能。但请记住,这可能只是因为我没有深入研究。在哪个Django版本中?
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)