【发布时间】:2017-12-12 07:34:10
【问题描述】:
如果我将用户-组关系作为多对多关系,将组-团队关系作为多对多关系,我将如何找到作为查询对象的用户-团队关系?
例如,如果我有一个这样的models.py:
class Group(models.Model):
name = CharField(max_length=100)
class User(models.Model):
username = models.CharField(max_length=100)
groups = models.ManyToManyField(Group, blank=True)
class Team(models.Model):
teamname = models.CharField(max_length=100)
groups = models.ManyToManyField(Group, blank=True)
我知道我可以通过创建如下所示的 for 循环来做到这一点,但考虑到 django 的架构,将其作为查询对象会更有用。
我的丑陋解决方案:
user = User.objects.get(username="Ed")
users_teams = []
user_groups = Group.objects.filter(user=user)
for group in user_groups:
group_teams = Team.objects.filter(group=group)
for team in group_teams:
user_teams.append(team)
所以这会给我一个可以与用户关联的查询对象列表,但它不像单个查询集那样容易使用,它包含每个用户-团队关系的查询对象。
我更喜欢看起来像这样的东西:
User.objects.get(username="Ed").groups.team_set.objects.all()
这绝对行不通。 有什么想法吗?
【问题讨论】:
标签: python django django-models django-orm