python - 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_soon
和recent
products有 3 个单独的调用。有没有办法减少数据库调用的次数?
我想构建单个查询,例如,
popular, coming_soon, recent = Product.objects.filter...and.so.on
有任何想法吗?谢谢
解决方案
我不这么认为.. 但是您可以使用一个查询集并从中过滤。
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)
推荐阅读
- c# - 在没有 PublicClientApplicationBuilder 和 AcquireTokenInteractive 的情况下在 MSAL 中为 EWS 获取委托权限
- kiwi-tcms - 如何将组件关联到测试用例?
- javascript - 如何使 DOM 中的 ES6 模块导出功能可用?
- python - 将单个组中的 pandas 数据帧迭代地附加到 h5 文件
- swift - Xcode 错误不会让我点击注册或登录
- javascript - 在js中禁用一些id
- r - 问:如何应用多重 LASSO 回归?
- windows - 获取内置 Windows 用户帐户的本地化名称的最短方法是什么?
- c - 用户定义的一维数组的加法和平均函数
- python - 每次方法调用都会自动调用 __init__ 吗?