Как оформить регистрацию?

Есть модель юзера:

class Client(AbstractBaseUser, PermissionsMixin):
    '''Кастомная модель пользователя'''
    email = models.EmailField('Почта', max_length = 60, unique = True)
    first_name = models.CharField('Имя', max_length=30, default = '')
    last_name = models.CharField('Фамлиия', max_length=30, default = '')
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    is_active = models.BooleanField(default=False)

Есть модель компании:

class Company(models.Model):
    '''Компания'''
    name = models.CharField('Название', max_length=50)
    url = models.URLField('Ссылка', max_length=100)
    admin = models.ForeignKey(Client, verbose_name='Администратор', on_delete=models.CASCADE)
    workers = models.ManyToManyField(Client, verbose_name='Работники', related_name='work')

Есть двухступенчатая регистрация. На первом этапе пользователь вводит свои данные и регистрируется, на втором вводит информацию для создания компании. Не могу понять, как правильно было бы реализовать ее создание.

!!! Важно, после регистрации аккаунта на почту приходит письмо с подтверждением.

Придумал несколько решений

  1. Можно при создании модели передавать айди пользователя, но тогда получится, что незалогиненные пользователи могут создавать эти компании, а этого хотелось бы избежать и использовать
def perform_create(self, serializer):
        serializer.save(admin=self.request.user)

Это проще и быстрее, как мне кажется

  1. При регистрации сделать третью вкладку, но поместить ее второй. После регистрации приходит на почту письмо с ссылкой активации. Можно спрашивать у пользователя, подтвердил ли он свой аккаунт, после чего пользователь нажмет на кнопку "Подтвердил", и фронт отправит запрос на получение access-токена по этому пользователю, а потом спокойно вставит его в заголовки запроса создания компании, таким образом юзер будет

  2. Можно отправлять данные пользователя и данные компании одним запросом, чтобы они приходили вместе, после чего я бы спокойно создавал и то и другое (самый бредовый вариант на мой взгляд)

Подскажите, какой из них более верный или просто предложите совершенно иной, который на ваш взгляд правильный Спасибо


Ответы (0 шт):