如何解决使用多个URL参数查询干草堆搜索
在大多数情况下,我的搜索都按照我需要的方式进行,但是我希望能够根据用户选择的类别进行排序。
我将searchForm
细分为包含以下内容:
def no_query_found(self):
"""
Determines the behavior when no query was found.
By default,no results are returned (``EmptySearchQuerySet``).
Should you want to show all results,override this method in your
own ``SearchForm`` subclass and do ``return self.searchqueryset.all()``.
"""
return self.searchqueryset.models(Idea)
def search(self):
sqs = super(IdeaCategories,self).search()
if not self.is_valid():
return self.no_query_found()
if self.cleaned_data['category']:
sqs = sqs.filter(tags__contains=self.cleaned_data['category'])
return sqs
以下按预期工作:
/testing/search/?q=test
->所有与“测试”相关的结果
/testing/search/?category=Development&q=
->所有与“发展”相关的结果
/testing/search/?category=Development&q=book
->所有与“开发”相关且包含“书”的结果
我唯一不知道的是如何使它在2个或更多类别上正确搜索:
/testing/search/?category=Development&category=Supplemental+Material&q=
是否可以获取类别列表,查询和筛选组合结果的方法?如:
sqs = sqs.filter(tags__contains["Development","Supplemental Material"])
解决方法
好吧!所以我现在想通了。
在我的searchForm类中:
我从数据库中创建了一个选项列表,供表单使用。
choices_group = tuple(
[(choice,choice) for choice in
Category.objects.values_list('label',flat=True)])
将这些选择应用于我的表单。
sort = forms.MultipleChoiceField(choices=choices_group,widget=forms.CheckboxSelectMultiple)
创建了我的查询集。
q_sorted = self.cleaned_data['sort']
if q_sorted:
sqs = sqs.filter(tags__in=q_sorted)
最后,在我的模板中。
{{form.sort}}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。