django-haystack:按参数传递的ID列表排序

时间:2012-03-17 11:24:37

标签: python django django-haystack

如何通过作为参数传递的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顺序排序结果。

2 个答案:

答案 0 :(得分:1)

我不知道如何使用django(我希望其他人这样做),但是你总是可以在查询后使用“普通”Python代码:

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

或类似的东西。

答案 1 :(得分:0)

您需要覆盖haystack的get_queryset方法,并将排序字段添加到索引模型中,如下所示 我在

中使用过的

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