如何通過作爲參數傳遞的ID列表來命令haystack中的搜索結果?django-haystack:作爲參數傳遞的ID列表的順序
ids_list = [341, 127, 12, 576, 32, 8]
sqs = SearchQuerySet().models(MyModel).filter(django_id__in=ids_list) # order by...?
我需要按ids_list
中ID的相同順序對結果進行排序。
如何通過作爲參數傳遞的ID列表來命令haystack中的搜索結果?django-haystack:作爲參數傳遞的ID列表的順序
ids_list = [341, 127, 12, 576, 32, 8]
sqs = SearchQuerySet().models(MyModel).filter(django_id__in=ids_list) # order by...?
我需要按ids_list
中ID的相同順序對結果進行排序。
我不知道怎麼會在Django(我希望別人一樣)來完成,但你總是可以用「正常」的Python代碼查詢後做:
sqs.sort(key=lambda x: ids_list.index(x.id))
或類似的東西那。
你需要重寫get_queryset草垛的方法,並添加您的排序字段,索引模型一樣,我在
使用x的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')
如果你想鏈接到一個更好解釋的博客條目,但你應該嘗試做出答案這裏SO與Q&A fromat一致,這意味着最好在這裏發佈回答OP問題的實際代碼。此外,該鏈接可能會被打破一天,但答案仍然在這裏。 – 2012-03-18 08:52:19
x.pk而非低於 .id會很好。 x.id是(應用程序名稱,模型名稱,obj id)的聯合結果。然後代碼就像 - sorted(sqs,key = lambda x:ids_list.index(x.pk)) – okm 2012-03-18 08:04:44
@okm:*「x.id是(app name,model name,obj id)的結合結果」 *你有參考嗎?所以你的建議可以推到答案中。 – 2012-03-18 08:56:06
當然,代碼在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