Добавление пользователя в группу в django

139

Как мне добавить пользователя в группу в django по имени группы?

Я могу это сделать:

user.groups.add(1) # add by id

Как бы я сделал что-то вроде этого:

user.groups.add(name='groupname') # add by name
David542
источник
Это решение чувствительно к версии? Когда я попробовал это django 1.8, я получил «неожиданное ключевое слово: имя»
rschwieb

Ответы:

248

Найдите группу, используя модель группы с именем группы, затем добавьте пользователя в user_set

from django.contrib.auth.models import Group
my_group = Group.objects.get(name='my_group_name') 
my_group.user_set.add(your_user)
juankysmith
источник
17
Спасибо за это. Кажется глупым, что некоторые из самых основных вещей либо отсутствуют, либо их трудно найти в документах django
Фрэнсис Якониелло 01
1
docs.djangoproject.com/en/dev/intro/tutorial01 В разделе «Игра с API» есть похожие примеры
juankysmith 01
9
Учебник довольно полезен. Я имел в виду то, что ожидал увидеть в разделе документов под auth для программного создания групп. вместо этого все, что есть, - это слабый абзац: docs.djangoproject.com/en/1.3/topics/auth/#groups Я думаю, это помогает помнить, что модели auth - это просто обычные модели, и применяется стандартная ссылка на модель.
Francis Yaconiello 01
где находится user_setв Django doc? Я нигде не могу найти
Мин Тай
1
@MinhThai значение по умолчанию для поля обратной связи - <content_type>_setкогда related_nameне установлено в поле.
sox с Моникой
99

Вот как это сделать в современных версиях Django (проверено в Django 1.7):

from django.contrib.auth.models import Group
group = Group.objects.get(name='groupname')
user.groups.add(group)
coredumperror
источник
1
вы также можете сделать Group.objects.get_by_natural_key('groupname'), но это не сокращает его: D
CpILL
2
@enchance Везде, где вам нужно. Вероятно, в коде представления, которое выполняет групповые задания.
coredumperror 09