Django 2多对多关系

时间:2019-01-08 16:32:44

标签: python django python-3.x django-models django-2.1

我正在使用Python(3.7)和Django(2.1)开发一个项目,我需要在该项目中建立用户与组织之间的关系。

我正在使用默认的Django用户模型和配置文件模型向用户添加额外的信息。

许多用户可以加入一个组织,一个组织可以有许多成员,一个用户可以创建一个组织,这些行为我需要实现,根据我的理解,我们需要为组织模型建立ManyToMany关系,但是不知道如何使用这种关系来显示信息,例如在用户的个人资料页面上显示用户的组织。

这是我的模特:

class Organization(models.Model):
    name = models.CharField(max_length=255, blank=False)
    users = models.ManyToManyField(User, related_name='members', null=True)

    def __str__(self):
        return self.name

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    image = models.ImageField(default='media/default.jpg', upload_to='profile_pics')
    goals = MultiSelectField(choices=goals_choices, default='')

    def __str__(self):
        return f'{self.user.username} Profile'

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式获取特定用户的所有组织:

my_user.members.all()

如果要从个人资料访问:

my_profile.user.members.all()

但是我建议删除related_name或重命名。如果删除它,则可以按以下方式访问所有用户组织:

my_user.organization_set.all()
my_profile.user.organization_set.all()

对于组织机构,您可以通过以下方式获取所有用户:

my_org.users.all()