2012-03-17 75 views

回答

1

我不知道怎麼會在Django(我希望別人一樣)來完成,但你總是可以用「正常」的Python代碼查詢後做:

sqs.sort(key=lambda x: ids_list.index(x.id)) 

或類似的東西那。

+0

x.pk而非低於 .id會很好。 x.id是(應用程序名稱,模型名稱,obj id)的聯合結果。然後代碼就像 - sorted(sqs,key = lambda x:ids_list.index(x.pk)) – okm 2012-03-18 08:04:44

+0

@okm:*「x.id是(app name,model name,obj id)的結合結果」 *你有參考嗎?所以你的建議可以推到答案中。 – 2012-03-18 08:56:06

+0

當然,代碼在https://github.com/toastdriven/django-haystack/blob/master/haystack/utils/__init__.py#L13。 pk參考http://django-haystack.readthedocs.org/en/latest/searchresult_api.html#attribute-reference – okm 2012-03-19 12:57:29

0

你需要重寫get_queryset草垛的方法,並添加您的排序字段,索引模型一樣,我在

使用x的

djangolinks.com

class LinkIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    creation = indexes.DateField(model_attr='creation') 
    title = indexes.CharField(model_attr='title') 
    total_votes = indexes.IntegerField(model_attr='total_votes') 
    tags = indexes.MultiValueField() 



sort_by = { 
    'd': '-creation', 
    't': 'title', 
    'v': '-total_votes', 
} 

class LinkListView(ListView): 
    context_object_name = "link" 
    def get_queryset(self): 
     sort = self.request.GET.get('sort') 
     if sort in sort_by.keys(): 
      return Link.published.filter().order_by('%s' % sort_by[sort]) 
     else: 
      return Link.published.filter().order_by('-creation') 

http://djangolinks.com/search/?q=django&tags=&sort=v

+0

如果你想鏈接到一個更好解釋的博客條目,但你應該嘗試做出答案這裏SO與Q&A fromat一致,這意味着最好在這裏發佈回答OP問題的實際代碼。此外,該鏈接可能會被打破一天,但答案仍然在這裏。 – 2012-03-18 08:52:19