【问题标题】:How to split django groups into subsets如何将 django 组拆分为子集
【发布时间】:2015-01-23 10:02:48
【问题描述】:

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

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

我想做这样的事情:

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

    【讨论】:

      猜你喜欢
      • 2022-11-13
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 2016-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多