如何在Django REST API中创建用户配置文件对象



我有两个用户配置文件模型,每个模型都指自定义用户

用户/型号.py

class Role(models.TextChoices):
ONE = 'ON', 'One'
TWO = 'TW', 'Two'

class ProfileOne(models.Model):
user = models.OneToOneField('CustomUser', on_delete=models.CASCADE)

class ProfileTwo(models.Model):
user = models.OneToOneField('CustomUser', on_delete=models.CASCADE)

PROFILE_MAP = {
Role.ONE: ProfileOne,
Role.TWO: ProfileTwo
}

class CustomUser(AbstractUser):
# fields definition
role = models.CharField(max_length=2, choices=Role.choices, null=True)
objects = CustomUserManager()
def create_profile(self, role):
profile = PROFILE_MAP[role](user=self)
profile.save()
return profile

我需要在注册后为用户创建配置文件。我曾尝试在自定义用户管理器的create_user()方法中执行此操作,但没有效果。

用户/经理.py

class CustomUserManager(BaseUserManager):
def create_user(self, first_name, last_name, email, role, password, **extra_fields):
# user initialization
user.save()
user.create_profile(role)
return user

怎么了?管理者适合这样做吗?

我发现这个操作应该在适配器中执行。

用户/适配器.py

class CustomUserAccountAdapter(DefaultAccountAdapter):
def save_user(self, request, user, form, commit=False):
user = super().save_user(request, user, form, commit)
data = form.cleaned_data
user.role = data.get('role')
user.save()
user.create_profile(user.role)
return user

项目/设置.py

ACCOUNT_ADAPTER = 'users.adapters.CustomUserAccountAdapter'

最新更新