Как я могу предотвратить дублирование сигналов? У меня есть пользователь, который назначается и в "клиент", и в "работник" вместо одной группы соответственно

<
from django.contrib.auth.models import User
from django.contrib.auth.models import Group


from .models import Client, Worker


def client_profile(sender, instance, created, **kwargs):
    if created:
        group = Group.objects.get(name='client')
        instance.groups.add(group)
        Client.objects.create(
            user=instance,
            name=instance.username,
        )
        print('Profile created!')


post_save.connect(client_profile, sender=User, dispatch_uid="client_profile")


def worker_profile(sender, instance, created, **kwargs):
    if created:
        group = Group.objects.get(name='worker')
        instance.groups.add(group)
        Worker.objects.create(
            user=instance,
            name=instance.username,
        )
        print('Profile created!')


post_save.connect(worker_profile, sender=User, dispatch_uid="worker_profile")

Это ожидаемое поведение, вы говорите своим сигналам, что каждый раз, когда создается модель пользователя, вы должны добавлять их в группу без каких-либо конкретных инструкций.

Вместо этого можно сделать проверку, состоит ли пользователь уже в данной группе, если да, то не добавлять его, если нет, то добавить в группу.

Сигналы в Django

Также я вижу, что у вас есть две разные модели, одна для рабочего, другая для клиента, поэтому лучшим обходным решением будет, если отправителем будет либо рабочая, либо клиентская модель, а затем добавить экземпляр пользователя в группу.

Вернуться на верх