Python 获取多对多对象的多对多字段
如果将用户组关系设置为多人关系,将组团队关系设置为多人关系,那么如何将用户团队关系设置为查询对象 例如,如果我有一个models.py,如下所示:Python 获取多对多对象的多对多字段,python,django,django-models,django-orm,Python,Django,Django Models,Django Orm,如果将用户组关系设置为多人关系,将组团队关系设置为多人关系,那么如何将用户团队关系设置为查询对象 例如,如果我有一个models.py,如下所示: class Group(models.Model): name = CharField(max_length=100) class User(models.Model): username = models.CharField(max_length=100) groups = models.ManyToManyField(
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)
User.objects.get(username="Ed").groups.team_set.objects.all()
我知道我可以通过创建如下的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)
因此,这将为我提供一个可以与用户关联的查询对象列表,但它不像单个查询集那么容易使用,因为该查询集包含每个用户团队关系的查询对象
我更喜欢这样的东西:
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)
User.objects.get(username="Ed").groups.team_set.objects.all()
这肯定不行。
有什么想法吗?Team.objects.filter(groups\uu user\uu username=“Ed”)
这就产生了你:
选择
`api_团队`.`id`,
`api_团队`.`团队名称`
来自api_团队`
在(`api\U team`.`id`=`api\U team\U groups`.`team\U id`)上的内部联接`api\U team\U groups`)
上的内部联接'api\u group'('api\u team\u groups`.'group\u id`='api\u group`.'id`)
在(`api\U group`.`id`=`api\U user\U groups`.`group\U id`)上的内部联接`api\U user\U groups`)
在(`api\U user\U groups`.`user\U id`=`api\U user`.`id`)上内部联接`api\U user`
其中'api\u user`.'username`='ed'