这是我在这里的第一篇文章,所以如果我做了什么我不应该说,我会改变它。 我目前正在与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语句不会出现在终端中。在
我也尝试了前面提到的问题中的其他方法,但都没有用。在
提前谢谢你的帮助。在
不要使用all()函数,而应使用load\u all()函数。 正如我所观察到的,当数量很大时,all()需要更多的时间来返回结果,而load_all()会很快给出结果,正如函数描述中所说:“有效地填充搜索结果中的对象。”“。在
把我的问题搁在一边,又去解决另一个问题后,我终于发现了我的错误。我的自定义视图没有使用我的自定义窗体,因为我没有将它添加到网址.py. 通过将form_class属性赋给我的视图网址.py所有内容都显示为不带查询:
网址.py:
相关问题 更多 >
编程相关推荐