我需要将django组拆分为逻辑子集,以便区分我用于管理的组件(例如标准组等)。
阅读代码我发现django Group模型只有两个字段:name
和permissions
。
我想做点什么:
Group.objects.filter(type='administration')
Group.objects.filter(type='standard')
等等。是否有任何内置函数可以执行此操作,或者我必须自己子类化Group模型并添加type
字段?
任何其他建议都被广泛接受!
答案 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 }}