Django - 按关联字段排序列表
我的模型:
Item:
name
desc
Type:
name
Value:
item.ForeignKey(Item)
type.ForeignKey(Type)
val.CharField # varchar or numeric
现在我有一个物品的列表,但不是一个查询集,比如说:items = [<object:1>, <object:2>, <object:4>]
。而t = 5
是来自Type表的一行的ID。
我想根据Value
表中的val
来对这个列表进行排序,并且这个值的类型是t
。有什么想法吗?
非常感谢!
更新:
- 我添加了一个新条件。
3 个回答
1
查看我在Python文档中找到的这个排序教程里的关键函数部分,地址在这里
1
sorted(items.objects.all(), key=lambda item: item.value_set.get().val if item.value_set.all() else None)
如果你的某些项目没有设置外键的话,应该这样做。
2
你可以使用lambda函数来对一组项目进行排序(前提是Item
和Value
模型之间是一一对应的关系,否则我觉得这个问题就不太成立了)。
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)