2015-07-20 38 views
1

我有haystack + django + aldryn-search設置搜索我的django-cms項目。我試圖讓我的模型上的索引工作,我可以看到結果和文字說明是好的,但網址總是/search/none。我將如何覆蓋url定義?Django haystack,在搜索結果中沒有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 

回答

2

我看你是不是從aldryn-search繼承的AldrynIndexBaseAbstractIndex基指數,這意味着你需要定義因爲你是乾草堆的內置索引類的子類,它不包含任何預定義的字段。

您可以輕鬆地添加它像這樣:

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```。

相關問題