Я создал сигнал, который должен делать 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)
, я все равно не могу добавить какие-либо группы в 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 shell
, и она отлично работает.
>>> from core.models import User
>>> from django.contrib.auth.models import Group
>>> group = Group.objects.get(pk=1)
>>> group
<Group: generics>
>>> user = User.objects.get(pk=23)
>>> user
<User: sonic>
>>> 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...