所以这是我的模特:
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)
因此用户将获得多个分数。对于排行榜页面,我想输出具有最高总分的用户(从所有不同分数中添加)。我真的迷失了python代码的功能。
任何帮助表示赞赏, 谢谢!
答案 0 :(得分:4)
最简单的方法是使用注释。
from django.db.models import Sum
best = User.objects.annotate(total_score=Sum('scores__score')).order_by('-total_score')[0:10]
文档中有一个example非常重要。
答案 1 :(得分:0)
这是所有谜题的排行榜页面还是只有一个?如果可以的话,你可以尝试类似的东西:
Score.objects.all().order_by('score')[:10] # limit 10
答案 2 :(得分:0)
我认为最好的方法是使用totalscore
字段创建用户个人资料模型。然后,您可以使用与保存分数模型相关联的信号来更新totalscore
字段。有关使用信号的帮助,请参见下文。
django how do i send a post_save signal when updating a user? https://docs.djangoproject.com/en/dev/ref/signals/
然后,您只需执行UserProfile.objects.all().order_by('totalscore')
编辑:以下是有关用户个人资料的一些信息。它们应与用户一对一,然后可以包含您喜欢的任何自定义字段。 Django user profile