【发布时间】:2019-06-24 19:11:27
【问题描述】:
我正在创建一个 Django 项目来帮助人们运营俱乐部和社区团体。我是 Django 新手,我可以想出很多不同的方法来将用户添加到俱乐部和管理权限,但不清楚正确的方法是什么。
我有一个“俱乐部”模型和一个“团队”模型。一个俱乐部可以有很多团队,一个俱乐部的成员可能是也可能不是一个团队的成员,但用户必须是俱乐部的成员才能加入团队。俱乐部/团队成员可以做什么和不能做什么(以及俱乐部/团队管理员可以做什么)也会有各种权限
我目前管理会员的计划是创建“ClubMembership”和“TeamMembership”模型并使用 ManyToManyField.through 创建关系,如下所示:https://docs.djangoproject.com/en/2.2/ref/models/fields/#django.db.models.ManyToManyField.through
对于权限,看起来我应该使用 django-guardian 并在人们加入/离开俱乐部/团队时设置权限。在我的俱乐部/团队模型中还有一个 django.contrib.auth.models.Group 的“成员”外键来跟踪这一点是否有意义?
感觉就像我在某些领域翻了一番,让会员由会员模型管理,然后还使用组来设置权限。有没有更好的方法来解决这个问题,或者我应该修改/考虑什么?
class Team(models.Model):
# Fields
name = models.CharField(max_length=255)
# Relationship Fields
club = models.ForeignKey(
'organizations.Club',
on_delete=models.CASCADE, related_name="teams",
)
members = models.ManyToManyField(
'organizations.Users.user',
related_name="teams", through='TeamMembership', through_fields=('team', 'user')
)
administrators = models.OneToOneField(
Group,
on_delete=models.CASCADE, related_name="teams",
)
class TeamMembership(models.Model):
# Fields
name = models.CharField(max_length=255)
# Relationship Fields
team = models.ForeignKey(
'organizations.Team',
on_delete=models.CASCADE, related_name="teammemberships",
)
user = models.ForeignKey(
'users.User',
on_delete=models.CASCADE, related_name="teammemberships",
)
总结一下我的问题:
- “TeamMembership”模型是关联用户的正确方法吗? 团队?
- 我应该在我的模型中包含组来容纳用户吗? 权限目的,还是会导致问题?
- 我应该考虑其他方法吗?
【问题讨论】:
标签: django django-models