Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
扩展django组和权限_Django_Django Models_Django Permissions - Fatal编程技术网

扩展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

在过去的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\u perm…

那么,让我们将团队模型更改为

这将扩展现有组。
名称
权限
字段直接来自集团模型。如果我创建了一个新团队,也会增加一个团队。太好了

通过自定义的
保存
方法,我还可以添加
成员
中列出的
用户
将被添加到创建的组中,并获得授予团队/组的权限

现在我的问题是,组的
名称
字段是唯一的-因此我无法为每个项目添加管理员团队


我考虑为前端添加另一个名称字段,并为组模型的名称字段生成一个唯一的字符串。但是,嗯……对于多个自定义组有更好的解决方案吗?也许有人有主意了?提前谢谢你

您需要使组名唯一。您发现的一种方法是使用另一个名称字段,使其对所有子组都是唯一的

另一种方法是利用现有的名称字段并添加您的特殊字符。例如,组名中有
admin#project1
members#project1
等(注意:我不确定组名中是否允许使用“#”,您可以选择允许的任何特殊字符)

因此,无论何时创建
Team
都会在
Team
models
save()
方法中使用后缀
#
更新名称字段

要更清楚地显示它,您可以添加
\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