嘿,我想根据 django 中的计算值对对象进行排序...我该怎么做?

这是一个基于堆栈溢出的用户配置文件模型示例,它解释了我的困境:

class Profile(models.Model):
    user = models.ForeignKey(User)

    def get_reputation():
        ... 
        return reputation
    reputation = property(get_reputation)

因此,假设我想按声誉对用户进行排序。我怎么做?我知道你不能这样做:

Profile.objects.order_by("-reputation")

谢谢大家的帮助 :)

有帮助吗?

解决方案

如果你需要做排序在数据库中(因为你有很多的记录,需要例如分页它们),唯一真正的选择是把口碑变成非规范化的领域(例如,在被覆盖的save()方法更新模型)。

其他提示

由于你的计算代码仅在Python的存在,必须执行在Python排序,以及:

sorted (Profile.objects.all (), key = lambda p: p.reputation)

从 Django-1.8 开始,可以使用以下命令对 QuerySet 进行排序 查询表达式 只要计算值可以用 SQL 呈现即可。您还可以使用 annotations 将模型作为 order_by 学期。

from django.db.models import F
Profile.objects.annotate(reputation=(F('<field>') + ...)).order_by("-reputation")

基本操作如 +, -, *, /** 可以与 F(). 。除此之外,还有其他一些功能,例如 Count, Avg, Max, ...

链接:

另请参阅此问答: 按聚合字段值对查询集进行排序

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top