Как оформить регистрацию?
Есть модель юзера:
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')
Есть двухступенчатая регистрация. На первом этапе пользователь вводит свои данные и регистрируется, на втором вводит информацию для создания компании. Не могу понять, как правильно было бы реализовать ее создание.
!!! Важно, после регистрации аккаунта на почту приходит письмо с подтверждением.
Придумал несколько решений
- Можно при создании модели передавать айди пользователя, но тогда получится, что незалогиненные пользователи могут создавать эти компании, а этого хотелось бы избежать и использовать
def perform_create(self, serializer):
serializer.save(admin=self.request.user)
Это проще и быстрее, как мне кажется
При регистрации сделать третью вкладку, но поместить ее второй. После регистрации приходит на почту письмо с ссылкой активации. Можно спрашивать у пользователя, подтвердил ли он свой аккаунт, после чего пользователь нажмет на кнопку "Подтвердил", и фронт отправит запрос на получение access-токена по этому пользователю, а потом спокойно вставит его в заголовки запроса создания компании, таким образом юзер будет
Можно отправлять данные пользователя и данные компании одним запросом, чтобы они приходили вместе, после чего я бы спокойно создавал и то и другое (самый бредовый вариант на мой взгляд)
Подскажите, какой из них более верный или просто предложите совершенно иной, который на ваш взгляд правильный Спасибо