Django haystack,搜索结果中没有网址

时间:2015-07-20 20:47:14

标签: django search django-urls django-haystack

我在django-cms项目中搜索了haystack + django + aldryn-search设置。我试图让我的模型上的索引工作,我可以看到结果和文本描述很好,但网址始终是/search/none。我如何覆盖网址定义?

search_indexes.py:

import datetime
from haystack import indexes
from .models import Event

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


    def get_model(self):
        return Event

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

models.py

class Event(ChangesMixin, models.Model):
    ....
    title = models.CharField(max_length=40)
    ....

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return '/cab/event/%i/' % self.id

1 个答案:

答案 0 :(得分:2)

我发现你没有从AldrynIndexBase继承AbstractIndexaldryn-search个基本索引,这意味着你需要定义url字段,因为你要对haystack的内置索引进行子类化没有任何字段预定义的类。

您可以像这样轻松添加:

class EventIndex(indexes.SearchIndex, indexes.Indexable):
    url = indexes.CharField(model_attr='get_absolute_url')

或者:

class EventIndex(indexes.SearchIndex, indexes.Indexable):
    url = indexes.CharField()

    def prepare_url(self, obj):
        return obj.get_absolute_url()

我建议使用第二种方法,因为如果提供的属性字符串有双下划线,例如get__title,则会查找event.get.title而不是event.get__title,因此第一种方法的行为会有所不同。

如果您的Event模型支持使用django-hvad或django-parler等库的多种语言,我强烈建议您使用AldrynIndexBase or AbstractIndex instead of haystack's indexes.SearchIndex```。< / p>