2013-10-07 88 views
1

時沒有列例外,我有一個用戶配置文件搜索索引,就像這樣:Django的草垛和嗖:排序

class UserProfileIndex(SearchIndex, Indexable): 
    text = CharField(document=True, use_template=True) 
    last_name = CharField(model_attr='last_name', indexed=True) 
    country = CharField(model_attr='country') 
    sectors = CharField(use_template=True) 
    services = CharField(use_template=True) 

    def get_model(self): 
     return UserProfile 

    def index_queryset(self, using=None): 
     """ 
     Used when the entire index for model is updated.""" 
     return self.get_model().public.all() 

,我試圖用這個命令由姓氏字段進行排序:

s = SearchQuerySet().all().order_by('last_name') 

我然後回來:

Exception: No column for field 'last_name' 

我沒有問題做該領域的過濾器。

s = SearchQuerySet().filter(last_name='Smith') 

工作正常。

我猜這是一個Whoosh問題,但我似乎無法找到解決辦法。

回答

2

不知道你是否已經解決了這個問題,但爲了解決這個問題的其他人,我遇到了同樣的問題,只是想出了它。

如果您在Haystack中的字段上使用order_by,並且Whoosh是您的後端,那麼您要排序的字段必須存在於所有索引中。不僅僅是你感興趣的那個.Filter不會受到這個相同的需求,這就是爲什麼這個查詢會經歷。

+0

感謝您的支持。但這是一個奇怪的要求,尤其是當我正在進行的項目中有大約15個不同的索引時。 我最終從Whoosh移動到切換到Elastic Search作爲後端。似乎沒有這些類型的問題。另一個我發現的是Whoosh不會讓你使用.model()語法,你必須使用filter(django_ct ='')。 –

+0

當我發現這個並剛剛完成項目時,我正要切換到彈性搜索。我覺得我用非常基本的查詢非常快速地達到了Whoosh的極限。我也遇到了.model限制。如果我進一步擴展我的項目,我會在繼續之前切換。 – pbaehr