【问题标题】:Django 2 Many to Many relationshipsDjango 2 多对多关系
【发布时间】:2019-01-09 00:54:25
【问题描述】:

我正在使用 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'

【问题讨论】:

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


    【解决方案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()
    

    【讨论】:

    • 嗨@SergeyPugach,如何在profile 模板中获取用户的组织?
    • 请分享您的个人资料模板并查看它,以查看您在那里传递的变量。
    猜你喜欢
    • 2012-02-26
    • 1970-01-01
    • 2011-06-02
    • 2012-09-18
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多