Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取多对多对象的多对多字段_Python_Django_Django Models_Django Orm - Fatal编程技术网

Python 获取多对多对象的多对多字段

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(

如果将用户组关系设置为多人关系,将组团队关系设置为多人关系,那么如何将用户团队关系设置为查询对象

例如,如果我有一个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)
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'