我使用自定义用户模型和employeeProfile创建了一个模型文件,其中包含员工个人资料的详细信息,以及一个用于自动为新用户创建个人资料的信号文件。尽管我已经设置了此设置,但不会自动创建新用户配置文件,迫使我在管理页面中手动添加它们。 请协助解决。
models.py 文件如下所示
(...) # imports
class CustomUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(max_length=255, unique=True)
name = models.CharField(max_length=255)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
date_joined = models.DateTimeField(
default=datetime.now, blank=True) # To add then run migrations
objects = CustomUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['name'] # email is already required, no need to add
def get_full_name(self):
return self.name
def get_short_name(self):
return self.name
def __str__(self):
return self.email
# Employees profile
class employeeProfile(models.Model):
user = models.OneToOneField(
CustomUser, on_delete=models.CASCADE, related_name="profile")
description = models.TextField(blank=True, null=True)
location = models.CharField(max_length=30, blank=True)
Department = models.CharField(max_length=30, blank=True)
Job_title = models.CharField(max_length=30, blank=True)
date_joined = models.DateTimeField(auto_now_add=True)
updated_on = models.DateTimeField(auto_now=True)
is_manager = models.BooleanField(default=False)
def __str__(self):
return self.user.name
CustomUserManager 文件
class CustomUserManager(BaseUserManager):
def create_user(self, email, name, password=None):
if not email:
raise ValueError("Users must have an email address")
email = self.normalize_email(email)
user = self.model(email=email, name=name)
user.set_password(password)
user.save()
return user
def create_superuser(self, email, name, password):
user = self.create_user(email, password)
user.is_superuser = True
user.is_staff = True
user.save()
return user
Signal.py文件
(...) # other imports
from django.contrib.auth import get_user_model
User = get_user_model()
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
if created:
employeeProfile.objects.create(user=instance)
注意:我已在帐户中注册信号
from django.apps import AppConfig
class AccountsConfig(AppConfig):
name = 'accounts'
def ready(self):
import accounts.signals
最佳答案
如果您正确设置信号,它应该可以满足您的要求。
信号的正确设置是您必须更新 apps.py
例如:
apps.py
class MyAppConfig(AppConfig):
name='myapp'
def ready(self):
# import your signal file in here if the app is ready
from . import receivers
最后通过导入您的 apps.py 来更新应用程序 init.py:
例如
default_app_config='myapp.apps.MyAppConfig'
关于python - 如何在Django中自动为注册到平台的新用户创建用户配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63057047/