2015-01-23 3 views
1

Мне нужно разделить группы django на логические подмножества, чтобы отличать те, которые я использую для администрирования от других (например, стандартные группы и т. Д.).Как разбить группы django на подмножества

Чтение кода Я обнаружил, что модель группы django Group имеет только два поля: name и permissions.

Я хотел бы сделать что-то вроде:

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

и так далее. Есть ли встроенная функция для этого или мне придется подклассифицировать модель Group самостоятельно и добавить поле type?

Любое другое предложение принято!

ответ

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) 

Я знаю, что выше, не является идеальным с точки дизайна потому что вы разрешаете группам принадлежать более чем одному типу (конечно, в зависимости от вашего требования, это может быть действительно необходимо), но вы вообще не общаетесь с фондовыми группами Django. Вы можете легко применять только один групповой тип для каждой группы с использованием сигнала с измененной m2m (https://docs.djangoproject.com/en/1.7/ref/signals/#m2m-changed): проверьте, является ли действие pre_add, и если в отношении этого отношения имеется более одного члена, добавьте ValidationError

Смежные вопросы