【发布时间】:2015-10-12 18:14:58
【问题描述】:
给定这样的场景:
from django.db import models
class Player(models.Model):
playername = models.CharField()
class Team(models):
teamname = models.CharField()
class Members(models):
player = models.ForeignKey(Player)
team = models.ForeignKey(Team)
class Division(models):
divname = models.CharField()
class DivisionTeam(models):
division = models.ForeignKey(Division)
team = models.ForeignKey(Team)
如何列出部门 id = 5 中的所有不同玩家?我已经查看了 Q 和 F 表达式,但我不是在寻找一组复杂的或。我想知道是否有一种方法可以链接多个object1_set.object2_set.all() 类型结构,或者我是否设置了一个嵌套循环来构建对象(通过上下文传递给模板),最终在模板中使用{% for p in players %} 类型循环. div id 作为请求变量传递。
【问题讨论】:
-
呃,
Player.objects.filter(members__team__divisionteam__divsion__pk=5)?或类似的东西?您的数据库结构令人困惑:P -
我假设您使用“不同”一词,出于某种原因,您有多个同名玩家,这就是问题的症结所在?你有什么理由不能只使用 .distinct() 吗?否则,我真的无法告诉你在这里问什么。
-
@NightShadeQueen 它是继承的(但我发挥了作用),基于现有的数据库,并针对这个问题进行了简化。谢谢,我试试看。
-
@foobarbecue 与众不同,因为我尝试过的其他一些事情会多次列出同一名球员,因为他们多年来出现在不止一支球队中。我已经阅读过 distinct() 的内容,但无法直截了当地使用它。
-
好的,我现在看到 Members 是 Team 和 Player 之间的中间模型。这实际上是有道理的——您可能希望将数据存储在 Member 中,例如玩家成为团队成员的日期。但是你的数据库中不应该有任何重复的玩家对象,所以你不需要 distinct() - 你只需要过滤。
标签: django