Django按请求值(id__in)排序查询集的方法

4

我通过ID列表查询Django表

hclistofcases = testcase.objects.filter(id__in="[182, 180, 184, 179, 178, 181, 183"))

这段话返回一个queryset,但是这个queryset不是按照列表顺序排列的(例如记录182在前,183在后)。有没有办法确保queryset按照列表顺序返回?我目前正在使用sqlite数据库。

如果能得到任何帮助,将不胜感激。

谢谢。

Grant


你可以尝试使用类似这样的代码:.order_by('id_in') - Essex
2个回答

1
empty = testcase.objects.none()
_ = []
for i in [182, 180, 184, 179, 178, 181, 183]:
    _.append(testcase.fiter(id=i))
return empty.union(*_)

0

我理解的对吗,它是按照ID排序而不是输入列表的顺序排序,我不想要这个178,179,180,181,182,183,184,而是182,180,184,179,178,181,183。 - mozman2
1
什么是决定列表顺序的选择标准?您可以在源表中的任何字段上使用order_by。或者,您可以执行以下操作:these_ids = [182, 180, 184, 179, 178, 181, 183] hclistofcases = [] for item in these_ids: hclistofcases.append(testcase.objects.filter(id=item))Python将强制执行列表顺序,但这不是非常高效,因为数据库将为每个ID进行单独的查询。 - tthayer
1
最终我做了那件事。将值添加到字典中。条目数量只会少于10个,所以我可以接受任何可能的性能问题。 - mozman2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接