为什么我的 Django 信号不适用于用户模型?

Why my django signals not working for User model?

我想在用户模型上实现 django 信号以创建用户配置文件。我想在注册任何用户时创建用户配置文件。这是我通过信号创建用户配置文件的代码:

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)

我不明白为什么在任何用户注册时都没有创建用户配置文件?

#更新问题

我正在使用抽象用户模型。这是我的用户 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")
      

由于定义了自定义用户模型,您不能使用from django.contrib.auth.models import User。也不推荐引用用户模型的方式。

docs 中所述,如果您已正确设置自定义用户模型,则可以使用 settings.AUTH_USER_MODEL 将自定义用户模型引用为发件人:

from django.conf import settings


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