Django: добавление пользователя в группы в сигналеPython

Программы на Python
Anonymous
Django: добавление пользователя в группы в сигнале

Сообщение Anonymous »

Я создал сигнал, который должен выполнять 3 действия:
  • Создать пользователя
  • Создать профиль указанного пользователя
  • Добавить пользователя в группу
Используя сигнал, шаги 1 и 2 работают нормально, но я не могу добавить пользователя в группу (шаг 3).

# Signals
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
group = Group.objects.get(name='generics')
instance.groups.add(group)


Провел некоторую отладку и обнаружил, что даже если я закомментирую Profile.objects.create(user=instance), я все равно не могу добавить группы в экземпляр.

Я что-то упустил? У меня нет никаких ошибок.

Изменить 1: Это пользовательская модель пользователя.

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
first_name = None
last_name = None

class Meta:
verbose_name_plural = 'users'

def __str__(self):
return self.username


Я просто переместил first_name и Last_name в таблицу Profile. Больше ничего не делал, как видите. Пользователи и профили успешно создаются, поэтому эта пользовательская модель работает нормально.

Хотя в этом нет необходимости, я добавил instance.save() после добавления группы, но это не так. все равно не будет работать. Администратор показывает, что группы не были добавлены, а таблица базы данных core_user_groups все еще пуста.

Изменить 2: Добавить консольный тест

Еще более странно, я попробовал добавить группу с помощью оболочки ./manage.py, и все работает нормально.

>>> from core.models import User
>>> from django.contrib.auth.models import Group
>>> group = Group.objects.get(pk=1)
>>> group

>>> user = User.objects.get(pk=23)
>>> user

>>> user.groups.add(group)

# At this point I check the admin and the db and it worked. Hmmm....but how to do it within a signal...


Подробнее здесь: https://stackoverflow.com/questions/563 ... n-a-signal

Вернуться в «Python»