Как сделать разные формы регистрации в зависимости от типа пользователя. Тип пользователя должен быть установлен перед самой регистрацией
Я пытаюсь сделать разные регистрационные формы для разных типов пользователей. Я создал пользовательского пользователя, который может быть либо клиентом, либо продавцом, вот так:
class CustomUser(AbstractBaseUser, PermissionsMixin):
class UserTypeChoices(models.TextChoices):
Customer = 'Customer', _('Customer')
Seller = 'Seller', _('Seller')
type = models.CharField(
max_length=8,
choices=UserTypeChoices.choices,
)
Моя идея заключается в том, что сначала человек, который заходит на мой сайт, должен выбрать свой тип, а затем он может зарегистрироваться в соответствии с этим типом. У продавцов в качестве USERNAME_FIELD должны быть номера телефонов, а у покупателей - email. Я знаю, что мне придется написать пользовательский бэкенд для этого, но все же это то, что я хочу сделать.
Я решил сделать две разные формы для этого: Первая с полем типа, которая должна перенаправлять на форму с обычной регистрацией. Эта первая форма выглядит следующим образом:
class UserTypeForm(UserCreationForm):
class Meta:
model = get_user_model()
fields = ["type"]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if self._meta.model.USERNAME_FIELD in self.fields:
self.fields[self._meta.model.USERNAME_FIELD].widget.attrs[
"autofocus"
] = True
del self.fields["password1"]
del self.fields["password2"]
def save(self, commit=True):
user = super().save(commit=False)
return user
И вот на чем я остановился сейчас, так как это дает мне:
Traceback (most recent call last):
File "D:\Python\Hillel\VolunteeringHub\venv\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
response = get_response(request)
File "D:\Python\Hillel\VolunteeringHub\venv\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:\Python\Hillel\VolunteeringHub\venv\lib\site-packages\django\views\generic\base.py", line 103, in view
return self.dispatch(request, *args, **kwargs)
File "D:\Python\Hillel\VolunteeringHub\venv\lib\site-packages\django\views\generic\base.py", line 142, in dispatch
return handler(request, *args, **kwargs)
File "D:\Python\Hillel\VolunteeringHub\venv\lib\site-packages\django\views\generic\edit.py", line 184, in post
return super().post(request, *args, **kwargs)
File "D:\Python\Hillel\VolunteeringHub\venv\lib\site-packages\django\views\generic\edit.py", line 153, in post
return self.form_valid(form)
File "D:\Python\Hillel\VolunteeringHub\src\accounts\views.py", line 21, in form_valid
self.object = form.save(commit=False)
File "D:\Python\Hillel\VolunteeringHub\src\accounts\forms.py", line 29, in save
user = super().save(commit=False)
File "D:\Python\Hillel\VolunteeringHub\venv\lib\site-packages\django\contrib\auth\forms.py", line 141, in save
user.set_password(self.cleaned_data["password1"])
KeyError: 'password1'
Несмотря на то, что у меня здесь commit=False, это не позволяет мне сохранить пользователя без пароля.
Мой вопрос в том, как я могу сохранить эту форму, чтобы просмотр перенаправлял на ту или иную форму регистрации.
Заранее спасибо!