ChoiceFields для предоставления двух разных форм или разных полей в html-шаблоне и django

Я пытаюсь сделать регистрационную форму для стоматолога и студента, где у меня есть поле выбора для стоматолога и студента. Я хочу, чтобы при выборе стоматолога я мог видеть поле specialties в html, а Django выбирал эту форму, а для студента - student_email и institution. Я запутался, как написать его код в шаблоне, я искал почти везде и не смог найти ничего, что могло бы помочь в том, что я хочу. Я также включил изображение с тем, как выглядит регистрационное изображение.

form.py

from django import forms
from django_countries.fields import CountryField


class RegistrationForm(forms.Form):

   Specialties = [
       ('pediatric','Pediatric'),
       ('oral surgeon','Oral Surgeon'),
       ('periodontist','Periodontist (Restorative; Esthetic)'),
       ('orthodontist','Orthodonsit'),
       ('endodontist','Endodontist'),
       ('prosthodontist','Prosthodontist'),
       ('oral pathologist','Oral Pathologist'),
       ('oral radiologist','Oral Radiologist'),
       ('public health dentist','Public Health Dentist'),
       ('research and academics','Research and Academics'),
   ]

   username = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'}), required=True, unique=True)
   email = forms.EmailField(widget=forms.EmailInput(attrs={'class':'form-control'}), required=True, unique=True)
   student_email = forms.EmailField(widget=forms.EmailInput(attrs={'class':'form-control'}), required=True, unique=True)
   password = forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control'}), required=True)
   password_repeat = forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control'}), required=True)
   first_name = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'}), required=True)
   last_name = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'}), required=True)
   date_of_birth = forms.DateField(label = "Date of Birth", widget=forms.SelectDateWidget([x for x in range(1920,2021)]), required=True)
   country = CountryField().formfield(required=True)
   gender = forms.ChoiceField(widget=forms.RadioSelect, choices=[('male','Male'),('female','Female')], required=True)
   specialty = forms.CharField(widget=forms.Select(choices= Specialties), required=True)
   institution = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'}), required=True)
   dentist_or_student = forms.ChoiceField(widget=forms.RadioSelect, choices=[('dentist','Dentsit'),('student','Student')], required=True)

   def clean_student_email(self):

       data = self.cleaned_data['student_email']
       if "@edu" not in data: #Check if the student's email is educational or not
           raise forms.ValidationError("Email must be @edu")
       return data

views.py

введите описание изображения здесь

Вы используете CharField (см. документы) для поля, которое имеет опции. Попробуйте вместо этого использовать ChoiceField ( смотрите документацию). Что-то вроде:

specialty = forms.ChoiceField(choices= Specialties, required=True)

Вам следует добавить оба элемента в html и сделать их скрытыми. Затем добавьте оповещение в Select, а в OnChange вы можете сделать hidden=false для выбранной формы.

YOURSELECT.addEventListener("change", document.getElementById(YOURSELECT.value).removeAttribute("hidden"););

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