使用多个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}}