2011-05-06 61 views
0

我的模型:Django的 - 由相关领域的排序列表

Item: 
    name 
    desc 

Type: 
    name 

Value: 
    item.ForeignKey(Item) 
    type.ForeignKey(Type) 
    val.CharField # varchar or numeric 

现在我有项目的对象列表,但不是一个QuerySet,例如:items = [<object:1>, <object:2>, <object:4>]。而t = 5是来自Type的一行id。

我想按的val对此列表进行排序,值类型为t。任何想法?

非常感谢!

更新:
- 我添加了一个新条件。

+0

发现如果你有一个正确的列表,这有什么错'list.sort()'? – 2011-05-06 12:25:07

回答

2

您可以随时使用lambda函数来排序的项目列表(假设存在一个ItemValue模型之间一对一的关系,否则我不认为这个问题是有道理的)

items.sort(key=lambda object: object.value_set.all()[0].val) 

虽然要注意的一点是,排序将在内存中。

更新的问题

只要添加一个过滤器应该做任务

items.sort(key=lambda object: object.value_set.filter(type__id=5)[0].val) 
1
sorted(items.objects.all(), key=lambda item: item.value_set.get().val if item.value_set.all() else None) 

应该做在你的外键不是为某些项目设置情况。

1

检查按键功能this排序的教程,我在python文档