【问题标题】:Calculating Foreign Key Totals in Django在 Django 中计算外键总数
【发布时间】:2021-10-08 11:40:38
【问题描述】:

我想制作表格来显示用户和团队的总分。

型号:

class Team(Model):
    team_name = models.CharField(max_length=20, null=True, blank=True)

class Player(Model):
    player_id = models.IntegerField(unique=True, null=False, blank=False)
    player_first_name = models.CharField(max_length=20, null=True, blank=True)
    player_last_name = models.CharField(max_length=20, null=True, blank=True)

class Game(Model):
    score = models.FloatField(null=False, blank=False)
    game_type = models.CharField(max_length=8, choices=GAME_CHOICES)
    team = models.ForeignKey(Team, on_delete=models.CASCADE)
    player = models.ForeignKey(Player, on_delete=models.CASCADE)

每场比赛都与特定的球员和特定的球队有关。每个玩家都可以在多个团队中,因此没有关系。

在我的表格中,我想要每个球员的总分和每支球队的总分。

我为我的桌子尝试过的代码:

class PlayerTable(tables.Table):
    sum_scores = tables.Column(Player.objects.annotate(total_score=models.Sum('game__score')))
    
    class Meta:
        model = Player
        exclude = ["id"]
        attrs = {'class': 'table table-sm'}

但是,这似乎不起作用。 我该如何解决这个问题,以便玩家表中的最后一列将是每个玩家的总分?

【问题讨论】:

  • 为什么要创建表列?我认为如果您在 orm 查询期间生成一个 sum 的虚拟字段会更好。

标签: python django django-models django-orm django-tables2


【解决方案1】:

由于您拥有 Player 记录,因此您可以使用自定义数据渲染功能来收集数据。

https://django-tables2.readthedocs.io/en/latest/pages/custom-data.html#table-render-foo-methods

class PlayerTable(tables.Table):
    sum_scores = tables.Column()
    
    class Meta:
        model = Player
        exclude = ["id"]
        attrs = {'class': 'table table-sm'}

    def render_sum_scores(self, record, value):
        player_games_qs = record.game_set.all()
        return sum([score for score in player_games_qs.values_list("score")])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 2021-04-29
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    相关资源
    最近更新 更多