这是一个快速的为您服务的:
我有一个ID列表,我想用它返回QuerySet(或数组(如果需要的话)),但是我想保持该顺序。
谢谢
我认为你不能在数据库级别强制执行该特定命令,因此你需要使用python来代替。
id_list = [1, 5, 7] objects = Foo.objects.filter(id__in=id_list) objects = dict([(obj.id, obj) for obj in objects]) sorted_objects = [objects[id] for id in id_list]
这将建立一个以id为键的对象字典,因此在建立排序列表时可以轻松检索它们。
从Django 1.8开始,你可以执行以下操作:
from django.db.models import Case, When pk_list = [10, 2, 1] preserved = Case(*[When(pk=pk, then=pos) for pos, pk in enumerate(pk_list)]) queryset = MyModel.objects.filter(pk__in=pk_list).order_by(preserved)