2016-02-26 46 views
4

是否有一个简单的方法来重用的Django风格的查询集排序排序模型对象的列表。我可以使用Django样式order_by()来排序现有模型对象而不是QuerySet的列表吗?

东西,将符合下列条件:

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

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

+1

我可以问,为什么你有决心列表开始吗?这听起来像真正的问题 – Sayse

+0

@Sayse我装饰与不是来自数据库,需要重新排序额外的字段列表。 – serg

+1

我想像你可能应用[这个答案](http://stackoverflow.com/a/14416773/1324033)然后,因为在这一点上,你有一个解决的查询,你可以使用本地Python方法 – Sayse

回答

2

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

虽然人们可以通过必需的属性编写一个简单的for-loop/comprehension命令,但如果您更喜欢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') 

注意,排序由相关领域(如parent__field)可能不会直接支持(没有?),你可能需要预先填充该字段与相关对象的值。

+1

(此处为lifter维护者)使用多个字段的Odering目前还不支持,但使用ForeignKey字段应该有效;) –

+1

好吧,对于垃圾邮件抱歉,只是想告诉@serg使用多个字段的排序已经在lifter 0.2中实现。 1,今天发布!有关更多详细信息,请参阅[文档](http://lifter.readthedocs.org/en/latest/usage.html#order_by)。 –

+0

@EliotBerriot谢谢! – serg

相关问题