我试图找出可以与一个模型实例关联的用户数量。
我有一个体育俱乐部项目。有许多用户(管理员和工作人员)只有一个俱乐部。我似乎无法与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)
答案 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