如何更改查询的默认顺序?

时间:2011-11-09 01:48:18

标签: django django-models django-queryset

我不希望任何排序应用于查询。所以,我有一个QuerySet跟随:

question_obj = Question.objects.filter(pk__in=[100,50,27,35,10,42,68]).order_by()

但是,当我检索结果时,它们始终按questionID排序。我迭代question_obj,这就是结果:

for obj in question_obj:
   obj.questionID

结果显示如下:

10L
27L
35L
42L
50L
68L
100L

3 个答案:

答案 0 :(得分:2)

如果要以与主键列表相同的顺序显示对象,则可以使用in_bulk创建由pk键入的字典。然后,您可以使用列表推导来生成问题列表。

>>> pks = [100,50,27,35,10,42,68]
>>> questions_dict = Question.objects.in_bulk(pks)
>>> questions = [questions_dict[pk] for pk in pks]
>>> for question in questions:
        print question.pk
100
50
27
35
...

答案 1 :(得分:0)

卢克,使用Source,呃,Docs!是的,就是这样!

Django QuerySet API - order_by()

答案 2 :(得分:0)

你可以做一些原始SQL(使用FIELD())alá:

Ordering by the order of values in a SQL IN() clause

应该允许您按照列表中建议的顺序检索它们。

使用ORM运行自定义SQL:

https://docs.djangoproject.com/en/dev/topics/db/sql/#executing-custom-sql-directly