扩展django组和权限
在过去的3天里,我一直在搜索Google和Stackoverflow,没有找到任何类似的东西。我想扩展或使用django组和权限 假设我们有一些不同团队和用户的项目扩展django组和权限,django,django-models,django-permissions,Django,Django Models,Django Permissions,在过去的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
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\u perm…
那么,让我们将团队模型更改为
这将扩展现有组。名称
和权限
字段直接来自集团模型。如果我创建了一个新团队,也会增加一个团队。太好了
通过自定义的保存
方法,我还可以添加成员
中列出的用户
将被添加到创建的组中,并获得授予团队/组的权限
现在我的问题是,组的名称字段是唯一的-因此我无法为每个项目添加管理员团队
我考虑为前端添加另一个名称字段,并为组模型的名称字段生成一个唯一的字符串。但是,嗯……对于多个自定义组有更好的解决方案吗?也许有人有主意了?提前谢谢你 您需要使组名唯一。您发现的一种方法是使用另一个名称字段,使其对所有子组都是唯一的
另一种方法是利用现有的名称字段并添加您的特殊字符。例如,组名中有admin#project1
,members#project1
等(注意:我不确定组名中是否允许使用“#”,您可以选择允许的任何特殊字符)
因此,无论何时创建Team
都会在Team
modelssave()
方法中使用后缀#
更新名称字段
要更清楚地显示它,您可以添加\uuuuuunicode\uuuuu()
方法以仅返回组名的第一部分。例如:
class Team(Group):
...
def __unicode__(self):
try:
return self.name.split('#')[0]
except:
#something wrong!
return self.name
谢谢你的回答。我已经考虑过这个可能性。但是分割这两个字段可能会更干净——因此我得到了为团队使用较长名称(组名限制为80)的好处,并且可以轻松地显示它们,而无需重新格式化。我还可以使用完整的组名来处理后端的项目/团队标识符。你怎么看?是的,有单独的字段更好,并且有自己的优势。不过,也要考虑一下你会使用的查询。这是我想到的最大的痛苦。我想知道没有人对django有类似的要求-我仍然找不到一些东西:(人们也必须看到这个答案,因为django可能会创建另一个表,并且不会选择扩展组模型:这种独特的名称约束使得组系统非常不幸地受到限制。我不喜欢它。
class Team(Group):
...
def __unicode__(self):
try:
return self.name.split('#')[0]
except:
#something wrong!
return self.name