Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django和基于外键的字段_Django_Django Models_Django Views - Fatal编程技术网

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值我认为注释要简单得多,并且不需要你去修改你的数据库。你可能想考虑使用你的模型名称的奇异性——<代码>谜题和分数> /代码> -与Django风格更加一致。当然,这取决于你。你可能想考虑使用你的模型名的单数-<代码>拼图和得分> /Cord>——与Django风格更加一致。当然,这取决于您。“无法将关键字“分数”解析到字段中。选项有:id、拼图、分数、用户”所以我得到了这个错误,当然,如果我这样做:Sum('score'),那么如果您重命名
分数
模型(如上所述),它将不会对分数进行求和或者在
user
字段上设置
related\u name
属性,则名称将不同。“无法将关键字“scores”解析到字段中。选项为:id、puzzle、scores、user”,因此我会出现此错误,当然,如果我这样做:Sum('scores'),则如果重命名
scores
模型,它不会对分数求和。”(如上所述)或在
user
字段上设置
related\u name
属性,则名称将不同。