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

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

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 django.dispatch.dispatcher import receiver


from .models import  Worker,Client

@receiver(post_save, sender=User)
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,
            email=instance.email,

        )
        print('Profile created!')





@receiver(post_save, sender=User)
def worker_profile(sender, instance, created, **kwargs):
    if created:
        
        Worker.objects.create(
            user=instance,
            name=instance.username,
            email=instance.email,
        )

models.py

from django.db import models
from django.contrib.auth.models import User
from django.utils.translation import gettext_lazy as _


# Create your models here.


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 = (
        ('Plumber', 'Plumber'),
        ('Electrician', 'Electrician'),
        ('Cleaner', 'Cleaner'),
    )
    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)
    bio = models.CharField(max_length=50, 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

views.py

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)

Вы связываете обе функции _profile() с сигналом сохранения, поэтому обе создадут объект

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