Django嵌套组:组中的组

时间:2014-10-02 19:12:59

标签: django django-authentication

在Django中(使用django.contrib.auth时)我可以将Group添加到另一个Group吗?即一个Group是另一个Group的成员吗?

如果是这样,我该怎么做?我使用UserGroup添加到user_set,但是根据我收集的内容,默认的Group模型自身并没有多少。

文档:https://docs.djangoproject.com/en/1.7/topics/auth/default/#groups

2 个答案:

答案 0 :(得分:0)

原生Django不提供此机会。

答案 1 :(得分:0)

django-groups-manager

这可以使用 django-groups-manager 来完成:

以下内容来自文档。它显示了创建一个名为“F.C.国际米兰”,然后添加“员工”和“球员”子组,最后将成员添加到这些组中。

from groups_manager.models import Group, Member
fc_internazionale = Group.objects.create(name='F.C. Internazionale Milan')
staff = Group.objects.create(name='Staff', parent=fc_internazionale)
players = Group.objects.create(name='Players', parent=fc_internazionale)
thohir = Member.objects.create(first_name='Eric', last_name='Thohir')
staff.add_member(thohir)
palacio = Member.objects.create(first_name='Rodrigo', last_name='Palacio')
players.add_member(palacio)

django-mptt

请注意,虽然 django-group-manager 包似乎在积极维护,但该包基于 django-mptt 包,该包在 GitHub 项目上标记为未维护

如之前的评论中所述,django-mptt 包也可能有助于实现此功能。

文档提供了一个示例,展示了向 parent 身份验证模型添加 Group 属性。

https://django-mptt.readthedocs.io/en/latest/models.html#registration-of-existing-models

import mptt
from mptt.fields import TreeForeignKey
from django.contrib.auth.models import Group

# add a parent foreign key
TreeForeignKey(Group, on_delete=models.CASCADE, blank=True, null=True).contribute_to_class(Group, 'parent')

mptt.register(Group, order_insertion_by=['name'])