Django和基于外键的字段
以下是我的模型:Django和基于外键的字段,django,django-models,django-views,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.IntegerFie
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代码将如何实现这一点
感谢您的帮助,
谢谢 这是所有谜题的排行榜页面还是只有一个?如果您可以尝试以下方法:
Score.objects.all().order_by('score')[:10] # limit 10
这是所有谜题的排行榜页面还是只有一个?如果您可以尝试以下方法:
Score.objects.all().order_by('score')[:10] # limit 10
我认为最好的方法是使用
totalscore
字段创建用户配置文件模型。然后,您可以使用与分数模型保存相关的信号来更新totalscore
字段。有关使用信号的帮助,请参见下文
然后,您只需执行UserProfile.objects.all().order\u by('totalscore')
编辑:这里是一些关于用户配置文件的信息。它们应该与用户一一对应,然后可以包含您喜欢的任何自定义字段。
我认为最好的方法是使用
totalscore
字段创建用户配置文件模型。然后,您可以使用与分数模型保存相关的信号来更新totalscore
字段。有关使用信号的帮助,请参见下文
然后,您只需执行UserProfile.objects.all().order\u by('totalscore')
编辑:这里是一些关于用户配置文件的信息。它们应该与用户一一对应,然后可以包含您喜欢的任何自定义字段。
最简单的方法是使用注释
from django.db.models import Sum
best = User.objects.annotate(total_score=Sum('scores__score')).order_by('-total_score')[0:10]
文档中有一个非常贴切的注释。最简单的方法是使用注释
from django.db.models import Sum
best = User.objects.annotate(total_score=Sum('scores__score')).order_by('-total_score')[0:10]
文档中有一个非常贴切的主题。这就是我现在看到的。问题是,由于用户有多个与其关联的分数,因此需要将分数相加,然后显示在排行榜上。否则它不会是一个总分,用户可能在排行榜页面上有多个条目,所以这就是我现在拥有的。问题是,由于用户有多个与其关联的分数,因此需要将分数相加,然后显示在排行榜上。否则它不会是一个总分,用户可能在排行榜页面上有多个条目,所以我创建了UserProfile,但我完全不知道如何获取信号来更新UserProfile中的totalscore值我认为注释要简单得多,并且不需要你去规范化你的数据库。所以我创建了UserProfile,但是我完全不知道如何获取信号来更新UserProfile中的totalscore值我认为注释要简单得多,并且不需要你去修改你的数据库。你可能想考虑使用你的模型名称的奇异性——<代码>谜题和
分数
模型(如上所述),它将不会对分数进行求和或者在user
字段上设置related\u name
属性,则名称将不同。“无法将关键字“scores”解析到字段中。选项为:id、puzzle、scores、user”,因此我会出现此错误,当然,如果我这样做:Sum('scores'),则如果重命名scores
模型,它不会对分数求和。”(如上所述)或在user
字段上设置related\u name
属性,则名称将不同。