这是我在这里的第一篇文章,所以如果我做了一些我不应该说的话,我会改变它。 我目前正在开发一个django项目。我被困了几次但是能够在stackoverflow上帮助自己解决这些重要的问题和答案。 我现在处于一个我无法帮助自己的地步,所以问题就在这里:
我正在用haystack和elasticsearch实现搜索。所有索引工作,我得到我想要的结果。订购和过滤也有效。现在我希望能够默认显示所有结果,然后在没有查询的情况下过滤或排序。我已经在Django Haystack - Show results without needing a search query?
尝试了所有内容虽然对搜索表进行了子类化,但似乎对我没有用。
我的代码:
forms.py :
class CustomSearchForm(SearchForm):
def no_query_found(self):
print('no query')
return self.searchqueryset.all()
search.html:
<form method="get" action=".">
{{ form.as_table }}
<button>hit</button>
</form>
...
{% if query or page_obj %}
{% for result in page_obj.object_list %}
<div class="col-md-2">
<div class="cell">
<div class="description">
{{ result.object.Studiengang }}
</div>
</div>
</div>
<div class="col-md-2">
<div class="cell">
<div class="description">
<p>{{ result.object.Bildungsinstitut }}</p>
...
{% empty %}
<p>No results found.</p>
{% endfor %}
{% if page_obj.has_previous or page_obj.has_next %}
<div>
{% if page_obj.has_previous %}
<a href="?
{% if urlquery %}{% for key, value in urlquery.items %}&{{ key }}={{ value }}{% endfor %}{% endif %}&page={{ page_obj.previous_page_number }}">{% endif %}«
Zurück{% if page_obj.has_previous %}</a>{% endif %}
|
{% if page_obj.has_next %}
<a href="?
{% if urlquery %}{% for key, value in urlquery.items %}&{{ key }}={{ value }}{% endfor %}{% endif %}&page={{ page_obj.next_page_number }}">{% endif %}
Weiter »{% if page_obj.has_next %}</a>{% endif %}
</div>
{% endif %}
{% else %}
{# Show some example queries to run, maybe query syntax, something else? #}
{% endif %}
views.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代码的可见性,并希望所有相关内容都存在。
不同的网址会发生什么:
所有结果 - 127.0.0.1:8000/de/search /
没有结果 - 127.0.0.1:8000/de/search /?&amp; order_up_Bildungsart
没有结果 - 127.0.0.1:8000/de/search /?&amp; filterbildungsart = Bachelor
无结果 - 127.0.0.1:8000/de/search/?q =
所有结果 - 127.0.0.1:8000/de/search/?q=Deutschland (q = Deutschland是一个查询,所有索引项目现在都有共同点)
所有结果 - 127.0.0.1:8000/de/search/?q=Deutschland&filterfachbereich=Ingenieurwissenschaften&order_up_Bildungsart (所有结果按预期排序和过滤)
我的问题还在于我似乎无法从我的表单中获取代码。 Print语句不会出现在终端中。
我也尝试过上述问题中的其他方法无济于事。
先谢谢你的帮助。
答案 0 :(得分:0)
把我的问题搁置一边然后再去另一个我终于找到了我的错误。我的自定义视图没有使用我的自定义表单,因为我没有在urls.py中添加它。通过urls.py将form_class属性提供给我的视图,所有内容都显示为没有查询:
<强> urls.py:强>
url(r'^search/$', views.MySearchView.as_view(form_class=CustomSearchForm), name='search_view'),
答案 1 :(得分:0)
使用 load_all()函数代替使用 all()函数。 正如我观察到的那样,当数量很高时,all()会花更多时间返回结果,并且load_all()可以非常迅速地返回结果,如函数描述中所述:“”“”有效地填充搜索结果中的对象。 “”” 。
def no_query_found(self):
return self.searchqueryset.load_all()