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"););