【发布时间】:2011-08-22 20:26:47
【问题描述】:
我正在为 Django 中的一些模型进行设计,并希望得到一些建议。我有一个团队模型,许多用户都可以参与其中。用户也可以是多个团队的成员,但不能两次成为同一团队的成员。我还想为每个团队/用户组合跟踪单独的信息。最重要的是,每个团队都会有一个“管理员”用户,但每个团队可能只有一个管理员。我有一些精简的数据模型定义如下:
class Team(models.Model):
name = models.CharField()
members = models.ManyToManyField(User, through='Membership')
admin = models.ForeignKey(User)
class Membership(models.Model):
user = models.ForeignKey(User)
team = models.ForeignKey(Team)
extra_data = models.CharField()
所以我想我的两个问题是:
1) 我将如何做到这一点,以便在会员模型中,没有用户和团队组合出现多次?
2) 有没有更好的方式来表示团队中的管理员,同时确保每个团队只有一个管理员?似乎如果我像这样存储管理员,同时执行只有一个管理员的规则,查询所有团队成员变得太麻烦,因为管理员不会在成员资格表中。如果他们存储在会员资格中,那么我必须执行另一个查询来查看他们是否是这个团队的管理员。在 Membership 中使用“is_admin”字段的想法突然出现在我的脑海中,但我不确定如何保持每个团队 1 个管理员的限制。
任何帮助将不胜感激。
更新: 看起来 unique_together 元标记是我在第一个问题上要寻找的。不过我还是对第二个很好奇....
【问题讨论】:
-
我认为在 Team 模型中建立管理员关系是正确的。就关系的性质而言,这是最合适的地方。 QuerySet API 可以让您获得几乎任何您想要的东西,通常只需要最少的查询。
标签: django database-design django-models