Django haystack,搜索结果中没有 url

Django haystack, no url in search results

我有 haystack + django + aldryn-search 设置用于搜索我的 django-cms 项目。我正在尝试让我的模型上的索引正常工作,我可以看到结果并且文本描述很好,但是 url 总是 /search/none。我将如何覆盖 url 定义?

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

我看到你没有从 aldryn-search 中继承 class 的 AldrynIndexBaseAbstractIndex 基础索引,这意味着你需要定义 url 字段,因为你是 subclassing haystack 的内置索引 class,它没有任何预定义的字段。

您可以像这样轻松添加:

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 等库支持多种语言,我强烈建议您使用 AldrynIndexBaseorA​​bstractIndexinstead of haystack'sindexes.SearchIndex` ``.