获取QuerySet并按相对表的值的总和对其进行排序

时间:2016-03-16 14:18:07

标签: 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'

如何获取QuerySet或dict用户按照他们的carma-points排序?

1 个答案:

答案 0 :(得分:3)

您可以注释User.objects.annotate(points_sum=Sum('karma__points')).order_by('points_sum') 个对象以包含点的总和,然后使用此信息进行排序:

app.gradle
compile 'com.google.android.gms:play-services:8.4.0'

project.gradle
dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0-beta6'
        classpath 'com.google.gms:google-services:2.0.0-beta6'

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