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 的 AldrynIndexBase
或 AbstractIndex
基础索引,这意味着你需要定义 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 等库支持多种语言,我强烈建议您使用 AldrynIndexBaseor
AbstractIndexinstead of haystack's
indexes.SearchIndex` ``.
我有 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 的 AldrynIndexBase
或 AbstractIndex
基础索引,这意味着你需要定义 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 等库支持多种语言,我强烈建议您使用 AldrynIndexBaseor
AbstractIndexinstead of haystack's
indexes.SearchIndex` ``.