我在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
答案 0 :(得分:2)
我发现你没有从AldrynIndexBase
继承AbstractIndex
或aldryn-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>