python - 获取一个 QuerySet 并按相关表的值之和对其进行排序

标签 python django django-queryset

我正在开发一个声誉应用程序,并尝试让用户字典按声誉点排序。我有一个标准的用户表和相关的 AuthUserKarma 表来存储累积的积分。

class AuthUserKarma(models.Model):
user_ref = models.ForeignKey(User, db_column='user_ref', blank=True, null=True,related_name="karma")
points = models.IntegerField(blank=True, null=True)
forwhat = models.CharField(max_length=255)
module_ref = models.ForeignKey('Modules', db_column='module_ref')
datetime = models.DateTimeField(auto_now_add=True)

为了获得用户累积的积分总和,我使用用户模型过程:

def points(self):
    from django.db.models import Sum
    return self.karma.aggregate(Sum('points'))['points__sum'] or '0'

如何获取按用户的卡玛点排序的查询集或字典?

最佳答案

您可以注释 User 对象以包含分数总和,然后使用以下信息进行排序:

User.objects.annotate(points_sum=Sum('karma__points')).order_by('points_sum')

这样做的另一个好处是可以在单个数据库查询中检索所有用户的总和。

关于python - 获取一个 QuerySet 并按相关表的值之和对其进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36038320/

相关文章:

python - 单击按钮后更改模型字段值

python - 如何使用封闭类的类型键入提示方法?

python - 在 Heroku 上登录 Django 没有出现

python - 在 Django 中使用 MySQLdb 的 MySQL 响应中的缓存问题

python - 装饰器在 Django 中覆盖 POST、GET 和 REQUEST - 做得对吗?

python - Blender Python 在同一组中选择对象?

python - shap.Explainer 构造函数错误要求未记录的位置参数

Django QuerySet - 如何 "disable"以前的过滤值

python - Django - 查询给出一列不等于同一模型中另一列的行

Django 查询十进制字段