如何将 Django 组拆分为子集
How to split django groups into subsets
我需要将 Django 组拆分为逻辑子集,以便将我用于管理的组与其他组(例如标准组等)区分开来。
阅读代码发现django Group模型只有两个字段:name
和permissions
。
我想做这样的事情:
Group.objects.filter(type='administration')
Group.objects.filter(type='standard')
等等。是否有任何内置函数可以执行此操作,或者我必须自己对 Group 模型进行子类化并添加一个 type
字段?
任何其他建议都可以接受!
我建议添加一个 GroupType
模型,而不是对组进行子类化,该模型与组具有多对多关系。像这样:
class GroupType(models.Model):
name = models.CharField(max_length=128)
groups = models.ManyToManyField('auth.Group', related_name='groups' )
现在,如果您想将组添加到特定类型,您只需执行
group = Group.get(...)
group_type = GroupType.objects.get(name='group_type_1')
group_type.groups.add(group)
我知道从设计的角度来看,以上内容并不完美,因为您允许组属于不止一种类型(当然,这取决于您的要求,这实际上可能是需要的)但是您没有根本不会与现有的 Django 组混淆。您可以使用 m2m 更改信号 (https://docs.djangoproject.com/en/1.7/ref/signals/#m2m-changed
) 轻松地为每个组强制执行一个 GroupType:检查操作是否为 pre_add
,如果此关系有多个成员,则抛出 ValidationError
我需要将 Django 组拆分为逻辑子集,以便将我用于管理的组与其他组(例如标准组等)区分开来。
阅读代码发现django Group模型只有两个字段:name
和permissions
。
我想做这样的事情:
Group.objects.filter(type='administration')
Group.objects.filter(type='standard')
等等。是否有任何内置函数可以执行此操作,或者我必须自己对 Group 模型进行子类化并添加一个 type
字段?
任何其他建议都可以接受!
我建议添加一个 GroupType
模型,而不是对组进行子类化,该模型与组具有多对多关系。像这样:
class GroupType(models.Model): name = models.CharField(max_length=128) groups = models.ManyToManyField('auth.Group', related_name='groups' )
现在,如果您想将组添加到特定类型,您只需执行
group = Group.get(...) group_type = GroupType.objects.get(name='group_type_1') group_type.groups.add(group)
我知道从设计的角度来看,以上内容并不完美,因为您允许组属于不止一种类型(当然,这取决于您的要求,这实际上可能是需要的)但是您没有根本不会与现有的 Django 组混淆。您可以使用 m2m 更改信号 (https://docs.djangoproject.com/en/1.7/ref/signals/#m2m-changed
) 轻松地为每个组强制执行一个 GroupType:检查操作是否为 pre_add
,如果此关系有多个成员,则抛出 ValidationError