Django - 按相关字段对列表进行排序

时间:2011-05-06 12:12:20

标签: python django algorithm django-models django-views

我的模特:

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的{​​{1}}对此列表进行排序,值类型为Value。有什么想法吗?

非常感谢!

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

3 个答案:

答案 0 :(得分:2)

你总是可以使用lambda函数对项目列表进行排序(假设ItemValue模型之间存在一对一的关系,否则我认为这个问题没有意义)< / p>

 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 :(得分:1)

sorted(items.objects.all(), key=lambda item: item.value_set.get().val if item.value_set.all() else None)
如果没有为某些项目设置外键,

应该这样做。

答案 2 :(得分:1)

检查我在python docs中找到的this排序教程中的关键函数