我有一个下面描述的列表。 我想要一个将按照列表顺序排序的查询集
id_list = [3,1,2]
queryset = Variant.objects.filter(pk__in=id_list)
queryset按以下顺序给出对象:
obj1
obj2
obj3
但我希望按照给定列表中的顺序对象:
obj3
obj1
obj2
如何??
答案 0 :(得分:0)
我认为您不能使用查询集执行此操作(我也不理解您为什么要...)
您可以使用地图执行此操作,但请注意,这将解决查询并且可能效率低下。
variants = list(map(lambda id: Variant.objects.get(pk=id), id_list))
答案 1 :(得分:0)
不要在代码中定义排序 - 将排序列添加到表中并按顺序排序。就是这样。
class Variant(models.Model):
order = models.IntegerField()
...
Variant(ordering=3).save() # id == 1
Variant(ordering=1).save() # id == 2
Variant(ordering=2).save() # id == 3
queryset = Variant.objects.filter(pk__in=id_list).order_by('order')
因此,您将根据所需顺序获得queryset。
否则google:django将列表转换为查询集,并使用Sayse答案作为代码的基础。 一个例子:django - convert a list back to a queryset