Создание формы для регистрации пользователей 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

Вернуться на верх