是否有任何方法来连接一个级别过去的related_name?



我反复遇到一个数据情况,我觉得django可能有一个快捷方式,但我找不到它…

我想访问通过related_name选择的查询集之外的模型1关系。感觉应该有一个单行代码,但我认为最好的是:

for p in team.players:
   do_whatever(p.user.email)

使用select_related将预缓存数据,但实际上不会以可用的形式将其提供给我。

team.players.select_related('user')  # still returns queryset of Players, not Users

似乎应该有一些方法让我通过一次调用获得相关user s的query_set。比如annotate:

users = team.players.annotate('user')   # doesn't work

是否有任何方法可以做我正在寻找的?或者是"for"- in;循环是唯一的出路吗?

我的类的基础(大大简化):

class Team(models.Model):
   name = models.CharField()
class Player(models.Model):
   team = models.ForeignKey(Team, on_delete=models.CASCADE, related_name="players")
   user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="players")
   captain = models.BooleanField()

除了执行select_related之后的for-in之外,是否有任何一行代码或优化?

您可以 .filter(…) <一口> [Django-doc] :

User.objects.filter(players__team=team)

这将检索所有有Player对象引用teamUser。如果一个User可以多次成为团队的一部分,你可以使用 .distinct() [Django-doc]每个User最多检索一次:

User.objects.filter(players__team=team).distinct()

相关内容

  • 没有找到相关文章

最新更新