Django - 按关联字段排序列表

0 投票
3 回答
1196 浏览
提问于 2025-04-16 17:07

我的模型:

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函数来对一组项目进行排序(前提是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)

撰写回答