1

我正在尝试在查询中“加入”这 4 个模型。我的出发点是 Team.id。我正在尝试将 SkillRecord 纳入结果,但我完全迷失了。

class Team(models.Model):
    user        = models.ForeignKey(User)
    id          = models.IntegerField(primary_key=True, null=False, unique=True)
    ...

class Player(models.Model):
    id              = models.IntegerField(primary_key=True)
    ...

class Transfer(models.Model):
    player          = models.ForeignKey(Player)
    seller          = models.ForeignKey(Team, related_name='transfer_seller')
    buyer           = models.ForeignKey(Team, related_name='transfer_buyer')
    date            = models.DateTimeField()
    ...

class SkillRecord(models.Model):
    player          = models.ForeignKey(Player)
    date            = models.DateTimeField(default=datetime.datetime.now)
    ...

到目前为止,这是我谦虚的方法

    def list_players(request, teamid):
        team = get_object_or_404(Team, id=teamid)
        players_transfers = Transfer.objects.filter(buyer=team).select_related('player')

我不太确定将 SkillRecord 模型引入游戏的下一步是什么。我似乎缺乏这类问题的基本要点,所以我想我需要戳一下。

另外,请随时给我更多的想法如何做到这一点,我或多或少地确定我也可以使用 manytomanyfields 左右来解决整个转移问题。

非常感谢

4

2 回答 2

0

做出一些假设,每个玩家都有一个团队,所以我们可以添加。

class Player(models.Model):
    team = models.ForeignKey(Team)

然后,如果您想要技能记录从那里开始

SkillRecord.objects.filter(player__team=team)
于 2013-09-05T11:02:02.500 回答
0

要获取 SkillRecord,您还需要添加相关名称:

class SkillRecord(models.Model):
    player          = models.ForeignKey(Player, related_name='skills')
    date            = models.DateTimeField(default=datetime.datetime.now)

然后进行查询:

qt = Transfer.objects.filter(...).select_related('player').prefetch_related('player__skills')

然后像这样检索它们:

qt[0].player.skills.all()
于 2013-09-05T11:12:46.017 回答