Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django/Haystack/Elasticsearch在未提供查询时显示所有结果_Python_Django_Search_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Python,Django,Search,elasticsearch" /> elasticsearch,Python,Django,Search,elasticsearch" />

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

Python Django/Haystack/Elasticsearch在未提供查询时显示所有结果,python,django,search,elasticsearch,Python,Django,Search,elasticsearch,这是我在这里的第一篇帖子,所以如果我做了什么,我不应该说,我会改变它。 我目前正在与django一起开发一个项目。我被卡住了好几次,但在stackoverflow这里我可以帮助自己回答一些很好的问题和答案。 我现在已经到了一个无法独自解决的地步,所以问题是: 我正在用haystack和elasticsearch实现搜索。所有的索引工作,我得到我想要的结果。排序和过滤也起作用。现在,我希望能够在默认情况下显示所有结果,然后在没有查询的情况下对它们进行过滤或排序。我什么都试过了 不过,对我来说,将S

这是我在这里的第一篇帖子,所以如果我做了什么,我不应该说,我会改变它。 我目前正在与django一起开发一个项目。我被卡住了好几次,但在stackoverflow这里我可以帮助自己回答一些很好的问题和答案。 我现在已经到了一个无法独自解决的地步,所以问题是:

我正在用haystack和elasticsearch实现搜索。所有的索引工作,我得到我想要的结果。排序和过滤也起作用。现在,我希望能够在默认情况下显示所有结果,然后在没有查询的情况下对它们进行过滤或排序。我什么都试过了

不过,对我来说,将Searchform子类化似乎并不管用

我的代码:

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 %}&amp;page={{ page_obj.previous_page_number }}">{% endif %}&laquo;
                    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 %}&amp;page={{ page_obj.next_page_number }}">{% endif %}
                    Weiter &raquo;{% if page_obj.has_next %}</a>{% endif %}
                </div>
            {% endif %}
        {% else %}
            {# Show some example queries to run, maybe query syntax, something else? #}
        {% endif %}
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
url(r'^search/$', views.MySearchView.as_view(form_class=CustomSearchForm), name='search_view'),
我缩短了html代码的可视性,希望所有相关的东西都在那里

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

所有结果-127.0.0.1:8000/取消/搜索/

无结果-127.0.0.1:8000/de/search/?&order\u up\u Bildungsart

无结果-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=Deutschland&filterfachbereich=IngenieurwisSensChapten&order\u up\u Bildungsart (所有结果按预期进行排序和筛选)

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

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


提前谢谢你的帮助。

把我的问题放到一边,然后又开始解决另一个问题,我终于发现了我的错误。我的自定义视图没有使用自定义表单,因为我没有将其添加到url.py中。通过URL.py将form_class属性赋予我的视图,所有内容都将在不进行查询的情况下显示:

url.py:

 <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 %}&amp;page={{ page_obj.previous_page_number }}">{% endif %}&laquo;
                    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 %}&amp;page={{ page_obj.next_page_number }}">{% endif %}
                    Weiter &raquo;{% if page_obj.has_next %}</a>{% endif %}
                </div>
            {% endif %}
        {% else %}
            {# Show some example queries to run, maybe query syntax, something else? #}
        {% endif %}
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
url(r'^search/$', views.MySearchView.as_view(form_class=CustomSearchForm), name='search_view'),

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