首页 > 解决方案 > 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参数进行过滤的最佳方法是什么?

标签: pythondjangoformsget

解决方案


推荐阅读