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