如何在不改变顺序的情况下将SearchQuerySet转换为QuerySet?

时间:2016-01-12 11:45:55

标签: python django django-haystack

我有doctors SearchQuerySet类型的对象,我想转换为QuerySet:

医生 = SearchQuerySet()。dwithin('location',point_data,max_dist).distance('location',point_data).order_by('distance')

results = [ r.pk for r in doctors ]

address_key = Address.objects.all()

add_obj = address_key.filter(pk__in=results)

现在 add_obj 是QuerySet的类型。

add_obj queryset与doctors具有相同的顺序SearchQuerySet具有pk的顺序。

1 个答案:

答案 0 :(得分:1)

使用pk__in时无法使用列表的顺序。

另一种方法是使用in_bulk来获取由id键入的所有对象。然后使用列表推导构造一个有序列表。

results = [r.pk for r in search_results]
objects = MyModel.objects.in_bulk(results)
objects_in_order = [obj[pk] for pk in objects]