【问题标题】:Django-haystack generic SearchView - no resultsDjango-haystack 通用 SearchView - 没有结果
【发布时间】:2015-12-26 19:38:40
【问题描述】:

我正在尝试根据the documentation here 让 haystack 使用基于类的通用视图。我可以从 shell 中的 SearchQuerySet 获得结果,因此模型正在被索引。但我无法让视图在页面上返回结果。

使用通用视图的主要原因是我想稍后扩展更多的 SQS 逻辑。

我可能遗漏了一些明显的东西......

views.py:

from haystack.query import SearchQuerySet
from haystack.generic_views import SearchView

from .forms import ProviderSearchForm
from .models import Provider

class ProviderSearchView(SearchView):
    template_name = 'search/provider_search.html'
    form_class    = ProviderSearchForm

    def get_context_data(self, *args, **kwargs):
        """ Extends context to include data for services."""
        context = super(ProviderSearchView, self).get_context_data(*args, **kwargs)
        context['body_attr']        = 'id="provider-search"'
        return context

    def get_queryset(self):
        queryset = super(ProviderSearchView, self).get_queryset()
        return queryset.filter(is_active=True)

search_indexes.py:

from haystack import indexes
from .models import Provider

class ProviderIndex(indexes.SearchIndex, indexes.Indexable):
    text        = indexes.CharField(document=True, use_template=True)
    title       = indexes.CharField(model_attr='name')
    created     = indexes.DateTimeField(model_attr='created')

    def get_model(self):
        return Provider

    def index_queryset(self, using=None):
        "Used when the entire index for model is updated."
        return self.get_model().objects.all()

forms.py

​​>
from django import forms
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Field, Submit
from crispy_forms.bootstrap import FieldWithButtons
from haystack.forms import SearchForm
from .models import Provider

class ProviderSearchForm(SearchForm):
    """ Override the form with crispy styles """

    models = [ Provider ]

    def __init__(self, *args, **kwargs):
        super(ProviderSearchForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.disable_csrf = True
        self.helper.form_tag = False
        self.helper.form_show_labels = False
        self.helper.layout = Layout (
            FieldWithButtons(
                Field('q', css_class='form-control input-lg', placeholder="Search providers..."),
                Submit('','Search', css_class='btn btn-lg btn-primary'))
        )

    def get_models(self):
        return self.models

    def search(self):
        sqs = super(ProviderSearchForm, self).search().models(*self.get_models())
        return sqs

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

【问题讨论】:

    标签: python django django-haystack django-generic-views


    【解决方案1】:

    问题是我的页面模板在 for 循环中使用了错误的变量。

    文档建议:

    for result in page_object.object_list
    

    应该是:

    for result in page_obj.object_list
    

    注意模板变量是page_obj

    See issue post on GitHub

    【讨论】:

    • 我的话这很烦人。让我整个下午都忙于调试。感谢您的回答。
    猜你喜欢
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    相关资源
    最近更新 更多