1

最接近什么,我问可以发现here的另一内部prefetch_related django-使用prefetch_related

说我有以下型号:

class Division(models.Model): 
    name = models.TextField() 
    state = models.IntegerField() 

class Team(models.Model): 
    name2 = models.TextField() 
    division = models.ForeignKey(Division, ...) 

class Player(models.Model): 
    name = models.TextField() 
    hometown = models.IntegerField() 
    team = models.ForeignKey(Team, ...) 

现在,我已经可以做的只是一个跟随表:

players = Player.objects.prefetch_related('team') 

我怎么会去加入state的查询集?我的目标是能够在模板内部做player.team.division.state。另一种选择是使用嵌套for循环,但我想避免这种情况。

+0

您的示例模型很难理解,因为它们具有非常相似的名称和字段。从另一个模型到'model3'没有外键/多对多字段,所以在这里没有理由使用'prefetch_related'。一个简单的'select_related'可以工作。 – Alasdair

+0

@Alasdair请看看我的编辑 – mjr

回答

2

这里您不需要prefetch_related。您可以使用select_related()关注从PlayerTeamDivision的外键。

players = Player.objects.select_related('team__division') 

用例为prefetch_related是,如果你开始用Division查询集,并希望在同一时间,以获取相关团队。

+0

不知道这应该是一个不同的问题,但是:即使一个球队没有球员,我将如何让球队和球员进入1个查询集? – mjr

+1

这是一个单独的问题。在提出新问题之前,请查看[预取相关文档](https://docs.djangoproject.com/en/1.9/ref/models/querysets/#prefetch-related)。示例模型与您的非常相似。您可以使用与团队到玩家的反向外键相关的预取,方式与他们用于多对多字段的方式相同。 – Alasdair

+0

我发现[预取对象文档](https://docs.djangoproject.com/en/dev/ref/models/querysets/#prefetch-objects)也非常有用。 – mjr