【问题标题】:django- Use prefetch_related inside of another prefetch_relateddjango- 在另一个 prefetch_related 中使用 prefetch_related
【发布时间】:2016-11-28 23:48:15
【问题描述】:

可以找到最接近我所要求的内容 here

假设我有以下模型:

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 循环,但我想避免这种情况。

【问题讨论】:

  • 您的示例模型很难理解,因为它们的名称和字段非常相似。从另一个模型到model3没有外键/多对多字段,所以这里没有理由使用prefetch_related。一个简单的select_related 就可以了。
  • @Alasdair 请看看我的编辑

标签: python django django-templates django-views django-queryset


【解决方案1】:

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

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

prefetch_related 的用例是,如果您从 Division 查询集开始,并希望同时获取相关团队。

【讨论】:

  • 不确定这是否应该是一个不同的问题,但是:即使球队没有球员,我如何将球队和球员放在一个查询集中?
  • 这是一个单独的问题。在您提出新问题之前,请查看prefetch related docs。示例模型与您的非常相似。您可以使用与团队之间的反向外键相关的预取,就像他们将其用于多对多字段一样。
  • 我发现prefetch objects documentation 也非常有用。
猜你喜欢
  • 1970-01-01
  • 2013-01-24
  • 2012-10-07
  • 2017-11-27
  • 2012-06-10
  • 1970-01-01
  • 1970-01-01
  • 2013-09-26
  • 1970-01-01
相关资源
最近更新 更多