Используя django-haystack, как упорядочить результаты по типу контента - PullRequest
4 голосов
/ 24 марта 2011

Я использую django-haystack для страницы поиска на моем сайте и хочу упорядочить все результаты по типу контента. Есть ли способ, которым я могу сделать это? Для упрощения предположим, что у меня есть одно приложение и несколько классов. Заранее спасибо

Ответы [ 2 ]

5 голосов
/ 21 февраля 2013

Не уверен, что вы подразумеваете под типом контента, но если вы говорите о группе по моделям, у меня это работает

        {% with page.object_list as results %}
            {% regroup results|dictsort:"verbose_name_plural" by verbose_name_plural as grouped_objects %}
            {% for ct in grouped_objects %}
                {{ ct.grouper }}
                {% for result in ct.list %}
                    <p>
                        <a href="{{ result.object.get_absolute_url }}">{{ result.object }}</a>
                    </p>
                {% endfor %}
            {% empty %}
                <p>No results found.</p>
            {% endfor %}
        {% endwith %}
4 голосов
/ 24 марта 2011

из How to order search results by Model:

Вы можете сделать SearchQuerySet().order_by('django_ct').Как предупреждение, это выбрасывает актуальность.Единственный способ сохранить релевантность и сгруппировать по моделям - это выполнить много запросов (по одному на модель - обычно с высокой эффективностью благодаря кешированию запросов) или выполнить запрос и постобработать результаты, перегруппировав их по ходу работы.

из searchindex api:

Haystack резервирует следующие имена полей для внутреннего использования: id, django_ct, django_id & content.Имена имен и типов раньше были зарезервированы, но больше не являются.

Вы можете переопределить эти имена полей, используя HAYSTACK_ID_FIELD, HAYSTACK_DJANGO_CT_FIELD & HAYSTACK_DJANGO_ID_FIELD при необходимости.

...