python - django 过滤多个 GET 参数
问题描述
我在搜索页面的结果旁边有一个搜索字段和两个额外的搜索参数(类别和平台)。
我的查询集在列表视图中如下所示:
def get_queryset(self):
query = self.request.GET.get('q')
category = self.request.GET.get('category')
platform = self.request.GET.get('platform')
text_query = (
Q(name__icontains=query) |
Q(category__name__icontains=query) |
Q(tags__name__icontains=query)
)
object_list = Results.objects.all()
if query:
object_list = object_list.filter(
text_query
)
if category:
object_list = object_list.filter(Q(category__name=category))
if platform:
if platform == "windows":
object_list = object_list.select_related('versions').latest().filter(windows=True)
elif platform == "linux":
object_list = object_list.select_related('versions').latest().filter(linux=True)
elif platform == "mac":
object_list = object_list.select_related('versions').latest().filter(mac=True)
return object_list
我知道最后一部分可以是一行exec
,但这不起作用,因为您无法过滤过滤器 ( object_list
) 的结果。
基于多个GET
参数进行过滤的最佳方法是什么?
解决方案
推荐阅读
- scala - 从 Uber Jar 中的资源加载 CSV 文件作为数据框
- generics - 在Java中是否可以调用兄弟类的受保护方法,其中兄弟具有不同的类型参数?
- google-apps-script - 即使脚本被授权,安装的触发器也会导致 Browser.inputBox 的权限错误
- javascript - 如何构建一个点击计数但仅显示带有反应组件的奇数的点击器?
- reactjs - React - Chrome 检查器显示正在添加/删除的元素,但更改在浏览器本身中不可见
- javascript - 在每个对象下方创建一个带有弹出窗口的动态列表(在 vue 中)
- unreal-engine4 - 如何在 UE4 中向特定方向发射光线?
- javascript - Appmaker:如何创建和访问全局变量?
- node.js - 使用 JWT Passport 的 NestJS 身份验证不起作用
- ios - 在 iOS 11.3 中使用 PWA 打开 PDF 的问题