Django.fun

Cannot understand django user group change signal behavior

I have a function to receive a signal when users change their group.

@receiver(signal=m2m_changed, sender=User.groups.through)
def save_profile(instance, action, reverse, model, pk_set, using, *args, **kwargs):
    print(model, instance)

When I change the group of the user with username "test" using the superadmin interface it outputs <class 'django.contrib.auth.models.Group'> test. But when I do it using following code,

 group = Group.objects.get(name='Customer')
 group.user_set.add(user)
 user.save()

it outputs <class 'django.contrib.auth.models.User'> Customer.

Because of the above issue I cant use

 if instance.groups.filter(name='Customer').exists():
    #Do something

inside the save_profile funtion. When I change groups using second method it gives AttributeError at /register/ 'Group' object has no attribute 'groups' error. How can I avoid getting this error?

I couldn't come up with a reason why this happens but I found a solution for it. I added the following lines to identify which situation it is.

if model != Group:
    userObj = User.objects.filter(id = list(pk_set)[0]).first()
else:
    userObj =  instance

Then I used the required logic as

if userObj.groups.filter(name='Customer').exists():
    #Do something

Tutorials

Современный Python: начинаем проект с pyenv и poetry

Настройка проекта Python — виртуальные среды и управление пакетами

Использование requests в Python — тайм-ауты, повторы, хуки

Понимание декораторов в Python

ProcessPoolExecutor в Python: полное руководство

map() против submit() с ProcessPoolExecutor в Python

Понимание атрибутов, словарей и слотов в Python

Полное руководство по slice в Python

Выпуск Django 4.0

Безопасное развертывание приложения Django с помощью Gunicorn, Nginx и HTTPS

Автоматический повтор невыполненных задач Celery

Django REST Framework и Elasticsearch

Докеризация Django с помощью Postgres, Gunicorn и Nginx

Асинхронные задачи с Django и Celery

Релизы безопасности Django: 3.2.4, 3.1.12 и 2.2.24

Выпуски исправлений ошибок Django: 3.2.3, 3.1.11 и 2.2.23

Эффективное использование сериализаторов Django REST Framework

Выпуски безопасности Django: 3.2.2, 3.1.10 и 2.2.22

Выпущенные релизы безопасности Django: 3.2.1, 3.1.9 и 2.2.21

Обработка периодических задач в Django с помощью Celery и Docker

View all tutorials →