我可以使用 Django 风格 order_by() 对现有模型对象列表而不是 QuerySet 进行排序吗?

ser*_*erg 5 python sorting django

有没有一种简单的方法可以重用 Django 风格的 QuerySet 排序来对模型对象列表进行排序。

对应的东西:

MyModel.objects.all().order_by('-field', 'parent__field')
Run Code Online (Sandbox Code Playgroud)

只有我得到了 alist(MyModel.objects.all())作为输入,所以我已经得到了所有对象,只需要在内存中对它们进行排序'-field', 'parent__field'

tut*_*uju 2

正如OP在评论中提到的,他已经修改了用于排序的字段的值,现在必须重新排序列表。

虽然可以编写一个简单的 for 循环/推导式来按必需的属性进行排序,但如果您更喜欢 Django ORM 的简洁界面,则可以使用最近的工具以相同的方式lifter操作对象/字典的集合:

import lifter

my_objects = MyModel.objects.all().order_by('-field', 'parent__field')

# ... manipulate my_objects ...

ObjModel = lifter.models.Model('MyModel')
manager = ObjModel.load(my_objects)

results = manager.order_by('-field', 'parent__field')
Run Code Online (Sandbox Code Playgroud)

请注意,可能不直接支持按相关字段(例如parent__field)排序(还?),并且您可能需要使用相关对象的值预先填充该字段。