干草堆说"没有找到结果。"无法配置搜索表单

时间:2015-08-04 14:28:14

标签: python django django-haystack

我尝试配置Haystack,但是当我在search.html输入内容时,它会说"没有找到结果" 我做了重建索引,所有帖子都被编入索引。 我使用基于类的视图,并认为我忘记了views.py。 谢谢你的帮助。

我的代码:

models.py

class Post(models.Model):
    title = models.CharField(max_length=255) # title of post
    datetime = models.DateTimeField(u'Дата публикации') # date of post
    content = models.TextField(max_length=10000) # text of post

views.py

class MySearchView(SearchView):
    template_name = "blog/search.html"
    def get_queryset(self):
        queryset = super(MySearchView, self).get_queryset()
        return queryset.filter(pub_date__gte=date(2015, 1, 1))

    def get_context_data(self, *args, **kwargs):
        context = super(MySearchView, self).get_context_data(*args, **kwargs)
        return context

search.hmtl

<form type="get" action=".">
    <input type="text" name="q">
    <button type="submit">Search</button>
</form>

{% if query %}
    {% for post in posts %}
        <h1>{{ post.title }}</h1>
        <p>{{ post.content }}</p>
    {% empty %}
        <p>No results found.</p>
    {% endfor %}
{% endif %}

search_indexes.py

class PostIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    title = indexes.CharField(model_attr='title')
    content = indexes.CharField(model_attr='content')

    def get_model(self):
        return Post

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

post_text.txt

{{ object.title }}
{{ object.content }}

我的来源。它有帮助

Simulink Block Diagram of Quadcopter Simulation

1 个答案:

答案 0 :(得分:0)

老问题,但对于谁 - 遇到同样的问题,请注意Haystack文档似乎有点过时,此时(2018年)。这是一个解决方案。

Haystack的基于类的SearchView继承自Django的MultipleObjectMixin,它提供名为&#39; object_list&#39;的模板变量中的项目列表。

另外,正如你可以在Haystack documentation中看到的那样,page_obj.object_list实际上是一个SearchResult对象列表而不是单个模型。

所以你的模板应该是这样的:

{% if query %}
    {% for result in object_list %}
        <h1>{{ result.object.title }}</h1>
        <p>{{ result.object.content }}</p>
    {% empty %}
        <p>No results found.</p>
    {% endfor %}
{% endif %}