【问题标题】:Django - Sort a list by related fieldsDjango - 按相关字段对列表进行排序
【发布时间】:2011-05-06 12:12:19
【问题描述】:

我的模型:

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。

我想按表Valueval 对这个列表进行排序,值的类型是t。有什么想法吗?

非常感谢!

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

【问题讨论】:

  • 如果你有正确的列表,list.sort() 有什么问题?

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


【解决方案1】:

您始终可以使用 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)

【讨论】:

    【解决方案2】:

    在我在 python 文档中找到的 this 排序教程中检查 Key Functions

    【讨论】:

      【解决方案3】:
      sorted(items.objects.all(), key=lambda item: item.value_set.get().val if item.value_set.all() else None)
      

      应该这样做,以防您的某些项目没有设置外键。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-09
        • 1970-01-01
        • 2013-08-07
        • 1970-01-01
        • 2019-01-20
        • 1970-01-01
        相关资源
        最近更新 更多