获取一个 QuerySet 并按相对 table 的值之和对其进行排序
Get a QuerySet and order it by sum of values of relative table
我正在开发一个声誉应用程序,并尝试让用户按声誉点数排序。我有一个标准用户 table 和相对 AuthUserKarma table 来存储应计点数。
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 或一个用户按他们的 carma-points 排序的字典?
您可以注释 User
个对象以包含点的总和,然后使用此信息进行排序:
User.objects.annotate(points_sum=Sum('karma__points')).order_by('points_sum')
这具有在单个数据库查询中检索所有用户的总和的额外好处。
我正在开发一个声誉应用程序,并尝试让用户按声誉点数排序。我有一个标准用户 table 和相对 AuthUserKarma table 来存储应计点数。
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 或一个用户按他们的 carma-points 排序的字典?
您可以注释 User
个对象以包含点的总和,然后使用此信息进行排序:
User.objects.annotate(points_sum=Sum('karma__points')).order_by('points_sum')
这具有在单个数据库查询中检索所有用户的总和的额外好处。