我有一个查询,如下所示,
new_list = [5, 15, 14, 23, 20]
queryset = Page.objects.filter(id__in=new_list)
当我尝试这个时,django提供了一个由id过滤的查询集。
for i in queryset:
print i.id
结果是[5,14,15,20,23]
但我不需要任何订购。
如果我在这里使用in_bulk(),我将获得返回类型dict的结果,并使用sorted()返回一个列表。我需要一个django查询集而不是这个。有人可以告诉我如何实现这一目标吗?我的预期结果如下。
type(queryset) >> django.db.models.query.QuerySet
for i in queryset:
print i.id
>>>[5, 15, 14, 23, 20]
请帮我找一个解决方案。
答案 0 :(得分:0)
我已经得到了我的问题的答案。
id_list = [10, 3, 13, 4]
clauses = ' '.join(['WHEN id=%s THEN %s' % (pk, i) for i, pk in enumerate(id_list)])
ordering = 'CASE %s END' % clauses
queryset = Page.objects.filter(id__in=id_list).extra(
select={'ordering': ordering}, order_by=('ordering',))
如果我使用额外的查询,因此我将获得一个queryset对象作为返回,这就是我想要的。