#django
#django
Вопрос:
Что я могу делать неправильно, код выполняется два раза. вместо загрузки пользователя в его конкретную группу из django.db.models.signals импортируйте post_save
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")
Ответ №1:
Это ожидаемое поведение, вы сообщаете своим сигналам, что каждый раз, когда создается пользовательская модель, вы должны добавлять их в группу без каких-либо конкретных инструкций.
Вместо этого вы могли бы проверить, находится ли пользователь уже в данной группе, если да, не добавляйте их, иначе добавьте в группу.
Также я вижу, что у вас есть две разные модели: одна для рабочего, другая для клиента, поэтому лучшим обходным путем было бы использовать отправителя в качестве либо вашей рабочей, либо клиентской модели, а затем добавить экземпляр пользователя в группу.