python - 如何编写Django模型以从多个表中获取记录?

标签 python mysql django join django-models

class Game(models.Model):
    total_players = models.IntegerField(max_length=10)
    created_on = models.DateTimeField(auto_now_add=True)
    updated_on = models.DateTimeField(auto_now=True)

class Players(models.Model):
    game = models.ForeignKey(Game, related_name='players')
    name = models.CharField(max_length=10, verbose_name="Player Name")
    created_on = models.DateTimeField(auto_now_add=True)
    updated_on = models.DateTimeField(auto_now=True)

class Score(models.Model):
    game = models.ForeignKey(Game)
    name = models.ForeignKey(Players, related_name='scores')
    score = models.IntegerField(max_length=10)
    created_on = models.DateTimeField(auto_now_add=True)
    updated_on = models.DateTimeField(auto_now=True)

如何使用 Django 模型编写此查询?

select p.name, sum(s.score) as total_score
from game g, players p, score s
where g.id=17 and  g.id = p.game_id and p.id = s.name_id
group by p.name 

非常感谢您的提前帮助。

最佳答案

我会尝试这个,但我不确定它是否会适本地过滤每个玩家的分数。我不认为你的关系是完全规范化的——如果 Score 对于 Players 是多对一的,而 Players 是多对的对于 Game,您通常不会将 game 作为 Score 上的独立 FK 进行跟踪。每个 Players 行是否真的只存在于一个游戏中?

from django.db.models import Sum
Game.objects.filter(id=17).values(players__name).annotate(total_score=Sum(players__scores_score))

关于python - 如何编写Django模型以从多个表中获取记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20448118/

相关文章:

python - Django rest framework 将 ArrayField 序列化为字符串

django - django-registration 和 FormWizard 结合使用时出现的问题

python - 删除 pandas 中的 html 标签

mysql没有。数据的

c# - 如何在不向服务器提交 SQL 语句的情况下获取 SqlParameter 的字符串表示形式?

mysql - 哪个 NoSql 用于存储数十亿个整数对数据?

python - 如何将 Django 模型上的属性(虚拟字段)公开为 TastyPie ModelResource 中的字段

python - 解释从mp3文件对象中读取的unicode数据

python - 测试python中字节是否为空

python - Selenium -socket.error : [Errno 111] Connection refused