多GET参数上的Django过滤器

2024-09-09 13:09:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我在搜索页面的搜索结果一侧有一个搜索字段和两个额外的搜索参数(类别和平台)

我的查询集在列表视图中如下所示:

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参数进行过滤的最佳方式是什么