如何将 Django 组拆分为子集

How to split django groups into subsets

我需要将 Django 组拆分为逻辑子集,以便将我用于管理的组与其他组(例如标准组等)区分开来。

阅读代码发现django Group模型只有两个字段:namepermissions

我想做这样的事情:

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