Django多用户合一模型。关于用户的模型

时间:2019-06-20 15:59:02

标签: python django django-models foreign-keys

我试图找出可以与一个模型实例关联的用户数量。

我有一个体育俱乐部项目。有许多用户(管理员和工作人员)只有一个俱乐部。我似乎无法与User模型形成多对一的关系。 我想主要按俱乐部过滤。 假设如果有3个俱乐部使用该项目,则每个俱乐部都希望由俱乐部而不是用户分开。

下面是我的模型的简化版本。 我还尝试过将ForeignKey添加到俱乐部,然后采用其他方法。

Class Club(models.model):
    name = models.CharField(max_length=40, null=True)


Class User(AbstractBaseUser):
    name = models.CharField(max_length=40, null=True)
    club = models.ForeignKey(Club, on_delete=models.CASCADE)

2 个答案:

答案 0 :(得分:1)

由于只有一个俱乐部,但用户众多,我相信您的模型应该保持这样,但是在用户模型上,您可以为俱乐部中的不同用户分配不同的角色

Class User(AbstractBaseUser):
    name = models.CharField(max_length=40, null=True)
    club = models.ForeignKey(Club, on_delete=models.CASCADE)
    is_staff = models.BooleanField(default=False)
    is_admin = models.BooleanField(default=False)

答案 1 :(得分:1)

您正在正确定义模型。创建ForeignKey时,与之关联的模型的每个实例(此处为Club模型)都可以通过Manager对象访问与其关联的实例。您可以在ForeignKey字段定义中定义“ related_name”参数,以便您的俱乐部对象可以通过自定义名称(而不是默认名称)访问与其相关联的用户:

Class Club(models.model):
    name = models.CharField(max_length=40, null=True)

Class User(AbstractBaseUser):
    name = models.CharField(max_length=40, null=True)
    club = models.ForeignKey(Club, related_name="members", on_delete=models.CASCADE)

然后,您可以使用club.members.all访问相关用户,并假设“ club”是传递到模板的Club上下文对象的名称,而“ members”是User模型与Club的ForeignKey关系的related_name。作为一个简单的示例,如果您想列出俱乐部的成员,则可以执行以下操作:

{% for member in club.members.all %}
    <p>{{member.name}} is a member</p>
{% endfor %}

查看此链接以获取有关ForeignKey关系的更多信息:https://docs.djangoproject.com/en/2.2/topics/db/queries/#following-relationships-backward