使用多个 URL 参数查询干草堆搜索

Query haystack search with multiple URL params

我的搜索在大多数情况下都按照我需要的方式工作,但我希望能够根据用户选择的类别进行排序。

我已将 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"])

好的!所以我现在想通了。

在我的搜索表单中 class:

我从数据库中创建了一个选项列表以在表单中使用。

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}}