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

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

Signals.py

from django.db.models.signals import post_save
from django.contrib.auth.models import User
from django.contrib.auth.models import Group


from .models import  Worker,Client



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)





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!')

   i have two groups, 'client' and 'worker'.. when i register a client everything is fine but for a worker he gets assigned to both groups. i need everyone to be assigned to their specific group

views.py

@unauthenticated_user
def registerPage(request):

    form = CreateUserForm()
    if request.method == 'POST':
        form = CreateUserForm(request.POST)
        if form.is_valid():
            user = form.save()
            username = form.cleaned_data.get('username')

            messages.success(request, 'Account was created for ' + username)
            return redirect('login')

    context = {'form': form}
    return render(request, 'users/register.html', context)



def workerRegister(request):
    if request.user.is_authenticated:
        return redirect('plumber_home')
    else:

        form = CreateUserForm()
        if request.method == 'POST':
            form = CreateUserForm(request.POST)
            if form.is_valid():
                user = form.save()
                username = form.cleaned_data.get('username')

                messages.success(
                    request, 'Account was created for ' + username)

                return redirect('worker_login')

    context = {'form': form, }
    return render(request, 'users/worker_register.html', context)

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

models.py

class Client(models.Model):
    user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
    name = models.CharField(max_length=200, null=True)
    phone = models.CharField(max_length=200, null=True)
    email = models.CharField(max_length=200, null=True)
    profile_pic = models.ImageField(default="profile1.png", null=True, blank=True)
    date_created = models.DateTimeField(auto_now_add=True, null=True)

    def __str__(self):
        return self.name



class Worker(models.Model):
    CATEGORY = (
        ('Plumbing', 'Plumbing'),
        ('Electrical', 'Electrical'),
        ('Cleaning', 'Cleaning'),
    )
 
    user = models.OneToOneField(
        User, null=True, blank=True, on_delete=models.CASCADE)
    name = models.CharField(max_length=200, null=True)
    phone = models.CharField(max_length=200, null=True)
    email = models.CharField(max_length=200, null=True)
    profile_pic = models.ImageField(
        default="profile2.png", null=True, blank=True)
    area_of_operation = models.CharField(max_length=200, null=True)
    category = models.CharField(max_length=200, null=True, choices=CATEGORY)
    description = models.CharField(max_length=200, null=True, blank=True)
    date_created = models.DateTimeField(auto_now_add=True, null=True)
    date_updated = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name

вы пост_сохраняете клиентский_профиль при создании пользователя, это также означает, что при создании рабочего пользователь пост_сохраняется как клиентский профиль. Используйте сигналы для обоих и поставьте @receiver над функцией.

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