我过去3天一直在搜索Google和Stackoverflow,但找不到任何类似内容。我想扩展或使用django组和权限。
假设我们有一些项目与不同的团队和用户。
class Project(models.Model):
owner = models.ForeignKey(User)
name = models.CharField(max_length=100)
class Team(models.Model):
project = models.ForeignKey(Project)
members = models.ManyToManyField(User)
name = models.CharField(max_length=100)
permission = models.ManyToManyField(Permission)
现在 - 一切都很好。现在我想要的是扩展django提供的现有Auth.Group,以便我可以直接使用request.user.has_perm...
。
所以,让我们将 Team-Model 更改为
class Team(Group):
project = models.ForeignKey(Project)
members = models.ManyToManyField(User)
这扩展了现有的集团。 name
和permissions
字段直接来自 Group-Model 。如果我创建了一个新的团队,那么也会添加组。那很棒。
使用自定义save
方法,我还可以添加user
中列出的members
,将添加到已创建的组并获取权限授予团队/团队。
现在我的问题是,群组的name
字段是唯一的 - 因此我无法为每个项目添加管理员 - 团队。< / p>
我考虑为前端添加另一个名称字段,并为 Group-Model 的名称字段生成唯一字符串。但是嗯....对于多个自定义组有更好的解决方案吗?也许有人有个主意?提前谢谢!
答案 0 :(得分:3)
您需要使组名称唯一。因此,您发现的一种方法是使用另一个名称字段,使其对所有子组都是唯一的。
另一种方法是利用现有的名字字段并添加你的特殊字符。例如,使用admin#project1
,members#project1
等的组名称。(注意:我不确定组名中是否允许'#',您可以选择允许的任何特殊字符。)
因此,每当您创建Team
时,都会在#<project_name>
模型Team
方法中使用后缀save()
更新名称字段。
要更加明智地显示它,您可以添加__unicode__()
方法以仅返回组名的第一部分。例如:
class Team(Group):
...
def __unicode__(self):
try:
return self.name.split('#')[0]
except:
#something wrong!
return self.name