获取一个QuerySet并按relative tab的值之和对其排序

2024-06-02 06:49:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我怎样才能得到一个查询集或一个用户是按他们的分数排序的dict?你知道吗


Tags: 用户reftruedb排序modelscolumnnull
1条回答
网友
1楼 · 发布于 2024-06-02 06:49:17

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

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

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

相关问题 更多 >