Создание формы для регистрации пользователей Django
У меня есть две модели пользователей:
class Company(AbstractBaseUser):
companyName = models.CharField(
max_length=50,
)
email = models.EmailField(
verbose_name='email address',
max_length=255,
unique=True,
)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['companyName']
class Expert(AbstractBaseUser):
Name = models.CharField(
max_length=25
)
lastName = models.CharField(
max_length=25
)
email = models.EmailField(
verbose_name='email address',
max_length=255,
unique=True,
)
company = models.ForeignKey('Company',
on_delete=models.CASCADE,
related_name='experts',
null=True,
)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['Name', 'lastName']
Я хочу создать две формы для регистрации пользователей, чтобы в окне регистрации у пользователя на экране было две вкладки, на которых он мог выбрать под каким видом пользователя он мог регистрироваться. Подскажите, пожалуйста, как я могу это реализовать?
Самое простое через стандартные формы Django. Создайте forms.py в директории приложения. Опишите форму. На примере модели Company будет также:
forms.py
from .models import Company
from django.forms import ModelForm, TextInput, EmailInput
class CompanyForm(ModelForm):
class Meta:
model = Company
fields = ['companyName', 'email']
widgets = {
'companyName': TextInput(attrs={
'class': 'form-control',
'placeholder': 'Введите наименование компании'
}),
'email': EmailInput(attrs={
'class': 'form-control',
'placeholder': 'Введите контактный электронный адрес'
}),
}
Потом в views.py создайте функцию обработчик.
views.py
from your_app.forms import CompanyForm
def add_copmany(request):
error_msg = ''
if request.POST:
form = CompanyForm(request.POST)
if form.is_valid():
form.save()
return redirect('somewhere')
else:
error_msg = 'Форма заполнена не корректно. Пожалуйста проверьте и повторите ввод'
context = {
'form': СompanyForm,
'error_msg': error_msg,
}
return render(request, 'add_company.html', context)
Ну и кусок HTML страницы:
HTML
<form method="post">
{% csrf_token %}
<table class="table table-borderless">
<tbody>
<tr>
<td>Название компании</td>
<td>{{ form.name }}</td>
</tr>
<tr>
<td>Почта</td>
<td>{{ form.mail }}</td>
</tr>
</tbody>
</table>
{% if error != '' %}
<span>{{ error }}</span><br><br>
{% endif %}
<button class="btn btn-success" type="submit"> Добавить компанию </button>
</form>
HTML страницу конечно можете оформить иначе. Это просто пример с использованием bootstrap