又一个QuerySet自定义排序问题

时间:2011-04-29 03:56:23

标签: python django django-queryset

很多搜索,到目前为止一无所获。

在我的django应用中,我的用户使用非常标准的评级模型对Model_X进行评级。我有一个处理大量数据的独立函数,当给定用户实例时,返回一个元组列表。第一个值对应于Model_X实例的主键,第二个值是预测评级。例如,它可能会返回以下元组列表。

[(1L, 5.25), (5L, 3.1), (23L, 1.83)]

我需要返回Model_X的QuerySet(它需要是一个QuerySet),只包含元组中列出的实例,按元组中这些预测的等级排序。

2 个答案:

答案 0 :(得分:1)

如果已经订购了评级元组列表,您可以使用Ordering by the order of values in a SQL IN() clause中的内容。

如果你正在使用MySQL,那么field()功能应该适合你。从排序的评级元组[x[0] for x in sorted_tuples]中拉出所有ID,然后使用该ID列表构建where子句,例如: (未经测试),

Model_X.objects.raw('select * from myapp_model_x where id in (5,1,23) order by field(id,5,1,23)']) 

答案 1 :(得分:0)

使用列表而不是QuerySet。您可以使用in_bulk

轻松构建它