Django对基于外键的字段求和

Sea*_*son 0 django django-models django-views

所以这是我的模型:

class Puzzles(models.Model):
    user = models.ForeignKey(User)
    puzzle = models.CharField(max_length=200)


class Scores(models.Model):
   user = models.ForeignKey(User)
   puzzle = models.ForeignKey(Puzzles)
   score = models.IntegerField(default=0)
Run Code Online (Sandbox Code Playgroud)

因此,用户将获得多个分数。对于排行榜页面,我想输出总得分最高的用户(从所有不同得分中添加)。我真的对执行此操作的python代码迷失了。

任何帮助表示赞赏,谢谢!

Kev*_*nry 5

最简单的方法是使用注释。

from django.db.models import Sum

best = User.objects.annotate(total_score=Sum('scores__score')).order_by('-total_score')[0:10]
Run Code Online (Sandbox Code Playgroud)

文档中有一个很好的例子


dan*_*son 0

这是所有谜题的排行榜页面还是仅一个谜题的排行榜页面?如果你可以尝试这样的事情:

Score.objects.all().order_by('score')[:10] # limit 10
Run Code Online (Sandbox Code Playgroud)