如何在 Django 中实现对同一参数的多个值的过滤?

How can I achieve filtering with multiple values for the same parameter in Django?

提问人:Corgi_dev 提问时间:10/25/2023 更新时间:10/25/2023 访问量:35

问:

我正在构建一个 Django 网站,该网站根据某些参数显示适合您的滑雪板。 其中一个参数是性别,例如,如果用户指定她是女孩,那么我想显示女性和男女皆宜的板 - 然后再次按所有其他参数(身高、风格、级别等)进行过滤。男孩们也一样。我还想展示男性板和中性板。

这是我的 TemplateView 中的代码片段:

    def get(self, request, *arg, **kwargs):
        gender = request.GET.get('gender')
        skills = request.GET.get('skills')
        style = request.GET.get('style')
        rider_name = request.GET.get('rider_name').split("'")[1].split("'")[0]
        filter = process_queryset(gender, skills, style)
        queryset = Snowboard.objects.filter(
            gender=filter['gender'],
            style=filter['style'],
            level=filter['level'],
        )
        return render(request, self.template_name,
                      {'gender': gender, 'snowboards': queryset, 'rider_name': rider_name})

我有这个单独的函数来处理过滤:

def process_queryset(gender, skills, style):
    filter_dict = {'gender': 'Female' if gender == 'girl' else 'Male',
                   'level': 'Beginner' if 'rookie' in skills else 'Intermediate-Advanced'}
    if style == 'freestyle':
        filter_dict['style'] = 'Park'
    elif style == 'freeride':
        filter_dict['style'] = 'Free Ride'
    else:
        filter_dict['style'] = 'All mountain'
    return filter_dict

因此,我首先尝试按性别进行筛选,并让它们都使用(尝试使用|和&),然后将QuerySet与另一个筛选器嵌套在一起

queryset = gender_filtering.filter(
            style=filter['style'],
            level=filter['level'],
        )
        queryset = Snowboard.objects.filter(
            gender=filter['gender'],
            style=filter['style'],
            level=filter['level'],
        )```

Also tried a lot of other stuff but none of it worked.
python django django-queryset django-filter

评论


答:

2赞 Denys Danov 10/25/2023 #1

当您将 2 个带有和不带过滤器的查询集合并时,您可以看到该过滤器根本不起作用。 您想要筛选性别为用户或 .就这么简单:unisex

queryset = Snowboard.objects.filter(
               gender__in=[filter['gender'], 'unisex'], 
               ...your other filters
               )

我正在使用查找按性别过滤所有滑雪板,它会返回一个包含男性或女性和男女通用滑雪板的查询集。 您可以在文档中找到其工作原理的更多详细信息,并了解有关字段查找的更多信息in

评论

0赞 Corgi_dev 10/25/2023
谢谢,我简直不敢相信事情就这么简单。它:)