boyenec
boyenec

Reputation: 1617

Why my django signals not working for User model?

I want to implement django signals on User model for create user profile. I want to create user profile when any user will be registered. here is my code for create user profile though signals:

from django.contrib.auth.models import User


@receiver(post_save, sender=User)
def user_is_created_or_save(sender,instance,created,**kwargs):
         user = instance.user
         first_name = instance.first_name
         last_name = instance.last_name
         if created:
            UserProfile.objects.create(user=user)

I am not understanding why user profile not creating when any user registered?

#updated question

I am using Abstract user model. here is my user mdoel:

class UserManagement(AbstractUser):
      is_blog_author = models.BooleanField(default=False)
      is_editor = models.BooleanField(default=False)
      is_subscriber = models.BooleanField(default=False)
      is_customer = models.BooleanField(default=False)

class Subscriber(models.Model):
      user = models.OneToOneField(UserManagement, on_delete=models.CASCADE, primary_key=True)
      email = models.EmailField(max_length=1000) 
      first_name = models.CharField(max_length=200)
      last_name = models.CharField(max_length=200)
      is_subscriber = models.BooleanField(default=False)

class UserProfile(models.Model):
      user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,related_name="userprofile")
      

Upvotes: 0

Views: 282

Answers (1)

Brian Destura
Brian Destura

Reputation: 12068

Since a custom user model has been defined, you can't use from django.contrib.auth.models import User. It is also not a recommended way to reference the user model.

As described in the docs if you have properly setup your custom user model, you can use settings.AUTH_USER_MODEL to reference your custom user model as the sender:

from django.conf import settings


@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def user_is_created_or_save(sender, instance, created, **kwargs):
    ...

Upvotes: 1

Related Questions