提问人:Corgi_dev 提问时间:10/25/2023 更新时间:10/25/2023 访问量:35
如何在 Django 中实现对同一参数的多个值的过滤?
How can I achieve filtering with multiple values for the same parameter in Django?
问:
我正在构建一个 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.
答:
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
谢谢,我简直不敢相信事情就这么简单。它:)
评论