如何将django组拆分为子集

时间:2015-01-23 10:02:49

标签: python django django-models django-authentication

我需要将django组拆分为逻辑子集,以便区分我用于管理的组件(例如标准组等)。

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

我想做点什么:

Group.objects.filter(type='administration')
Group.objects.filter(type='standard')

等等。是否有任何内置函数可以执行此操作,或者我必须自己子类化Group模型并添加type字段?

任何其他建议都被广泛接受!

1 个答案:

答案 0 :(得分:0)

我建议添加一个与组有多对多关系的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)

我从设计的角度来看,上述情况并不完美,因为您允许群组属于多种类型(当然,根据您的要求,实际上可能需要这种情况),但您不要# 39;与Django团体一起搞乱。通过使用m2m更改的信号(https://docs.djangoproject.com/en/1.7/ref/signals/#m2m-changed),您可以轻松地为每个组强制执行一个GroupType:检查操作是否为pre_add,如果此关系中有多个成员,则抛出{{1 }}