为什么我的 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):
...
我想在用户模型上实现 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):
...