Django/Haystack/Elasticsearch在未提供查询时显示所有结果

2024-09-30 18:17:21 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我在这里的第一篇文章,所以如果我做了什么我不应该说,我会改变它。 我目前正在与django开发一个项目。我被困了好几次,但在stackoverflow,我能帮助自己解决好问题和答案。 我现在正处于一个我无法独自解决的问题,所以问题是:

我正在用haystack和elasticsearch实现搜索。所有的索引工作,我得到我想要的结果。排序和过滤也起作用。现在我希望能够在默认情况下显示所有结果,然后过滤或排序,而不需要查询。我已经在Django Haystack - Show results without needing a search query?尝试了所有的方法

但我似乎不太适合Searchform的子类。在

我的代码:

表单.py

class CustomSearchForm(SearchForm):

    def no_query_found(self):
        print('no query')
        return self.searchqueryset.all()

搜索.html:

^{pr2}$

视图.py:

class MySearchView(SearchView):
    """My custom search view."""

def get_queryset(self):
    urlquery = self.request.GET.copy()
    queryset = super(MySearchView, self).get_queryset()
    if urlquery:
        if 'filterbildungsart' in urlquery:
            queryset = queryset.filter(Bildungsart=urlquery['filterbildungsart'])
        if 'filterfachbereich' in urlquery:
            queryset = queryset.filter(Fachbereich=urlquery['filterfachbereich'])
        if 'order_up_Studiengang' in urlquery:
            return queryset.order_by('Studiengang')
        elif 'order_down_Studiengang'in urlquery:
            return queryset.order_by('-Studiengang')
        elif 'order_up_Bildungsinstitut' in urlquery:
            return queryset.order_by('Bildungsinstitut')
        elif 'order_down_Bildungsinstitut'in urlquery:
            return queryset.order_by('-Bildungsinstitut')
        else:
            return queryset
    else:
        return queryset

为了便于查看,我缩短了html代码,希望所有相关内容都在那里。在

在不同的URL上会发生什么:

所有结果-127.0.0.1:8000/de/search/

无结果-127.0.0.1:8000/de/search/?&订购成长广告(amp;O)

无结果-127.0.0.1:8000/de/search/?&;filterbildungsart=学士

无结果-127.0.0.1:8000/de/search/?q=

所有结果-127.0.0.1:8000/de/search/?q=德国 (q=Deutschland是一个所有索引项现在都有共同点的查询)

所有结果-127.0.0.1:8000/de/search/?q=德国过滤器制造商 (所有结果按预期排序和筛选)

我的问题还在于我似乎无法从表单中进入代码。Print语句不会出现在终端中。在

我也尝试了前面提到的问题中的其他方法,但都没有用。在

提前谢谢你的帮助。在


Tags: 代码inselfsearchbyreturnif排序
2条回答

不要使用all()函数,而应使用load\u all()函数。 正如我所观察到的,当数量很大时,all()需要更多的时间来返回结果,而load_all()会很快给出结果,正如函数描述中所说:“有效地填充搜索结果中的对象。”“。在

    def no_query_found(self):
        return self.searchqueryset.load_all()

把我的问题搁在一边,又去解决另一个问题后,我终于发现了我的错误。我的自定义视图没有使用我的自定义窗体,因为我没有将它添加到网址.py. 通过将form_class属性赋给我的视图网址.py所有内容都显示为不带查询:

网址.py:

url(r'^search/$', views.MySearchView.as_view(form_class=CustomSearchForm), name='search_view'),

相关问题 更多 >