我正在开发一个声誉应用程序,并尝试让用户字典按声誉点排序。我有一个标准的用户表和相关的 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/