Не удается понять поведение сигнала об изменении группы пользователей в django
У меня есть функция для получения сигнала, когда пользователи меняют свою группу.
@receiver(signal=m2m_changed, sender=User.groups.through)
def save_profile(instance, action, reverse, model, pk_set, using, *args, **kwargs):
print(model, instance)
Когда я изменяю группу пользователя с именем "test" с помощью интерфейса суперадмина, он выдает <class 'django.contrib.auth.models.Group'> test
. Но когда я делаю это с помощью следующего кода,
group = Group.objects.get(name='Customer')
group.user_set.add(user)
user.save()
выводит <class 'django.contrib.auth.models.User'> Customer
.
Из-за вышеуказанной проблемы я не могу использовать
if instance.groups.filter(name='Customer').exists():
#Do something
внутри функции save_profile
. Когда я меняю группы, используя второй метод, это дает ошибку AttributeError at /register/ 'Group' object has no attribute 'groups'
. Как я могу избежать этой ошибки?
Я не смог придумать причину, почему это происходит, но нашел решение. Я добавил следующие строки, чтобы определить, в какой ситуации это происходит.
if model != Group:
userObj = User.objects.filter(id = list(pk_set)[0]).first()
else:
userObj = instance
Затем я использовал требуемую логику как
if userObj.groups.filter(name='Customer').exists():
#Do something