Как создать объект профиля пользователя в Django REST API? - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть две модели профиля пользователя, каждая из которых относится к пользовательскому пользователю

user / models.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() пользовательского менеджера, но он не работает.

user / Manager.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

В чем проблема ? И подходят ли для этого менеджеры?

1 Ответ

0 голосов
/ 25 февраля 2020

Я понял, что это действие должно выполняться в адаптерах.

users / adapters.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

project / settings.py

ACCOUNT_ADAPTER = 'users.adapters.CustomUserAccountAdapter'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...