如何通过作为参数传递的ID列表在haystack中订购搜索结果?
ids_list = [341, 127, 12, 576, 32, 8]
sqs = SearchQuerySet().models(MyModel).filter(django_id__in=ids_list) # order by...?
我需要按照ids_list
中相同的ID顺序排序结果。
答案 0 :(得分:1)
我不知道如何使用django(我希望其他人这样做),但是你总是可以在查询后使用“普通”Python代码:
sqs.sort(key=lambda x: ids_list.index(x.id))
或类似的东西。
答案 1 :(得分:0)
您需要覆盖haystack的get_queryset方法,并将排序字段添加到索引模型中,如下所示 我在
中使用过的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')