Форма Django не отображается в шаблоне
Я пытаюсь показать две формы (UserRegisterForm
и TeacherRegisterForm
) в одном шаблоне. Но, только UserRegisterForm
отображается в отрисованном HTML.
teacher-register.html
<form enctype="multipart/form-data" action="" method="post">
{% csrf_token %}
{% crispy user_form %}
{% crispy teacher_form %}
<div class="form-group mt-3">
<button class="btn btn-outline-info" type="submit">Sign Up</button>
</div>
</form>
urls.py
urlpatterns = [
path('login/', LoginView.as_view(template_name='accounts/login.html'), name='login'),
path('register/', register, name='register'),
path('TeacherRegister/', register_teacher, name='teacher-register'),
path('logout/', sign_out, name='logout'),
path('profile/', sign_out, name='logout'),
]
views.py
def register_teacher(request):
if request.user.is_authenticated:
return redirect('dashboard')
if request.method == 'POST':
user_form = UserRegisterForm(request.POST)
teacher_form = TeacherRegisterForm(request.POST,
request.FILES)
if user_form.is_valid() and teacher_form.is_valid():
user = user_form.save(commit=False)
user.is_student = False
user.is_teacher = True
user.save()
profile = teacher_form.save(commit=False)
profile.user = user
profile.save()
messages.success(
request, f'Your account has been created!')
return redirect('login')
else:
user_form = UserRegisterForm()
teacher_form = TeacherRegisterForm()
context = {
'user_form': user_form,
'teacher_form': teacher_form,
}
return render(request, 'accounts/teacher-register.html', context)
forms.py
class TeacherRegisterForm(forms.ModelForm):
image = forms.ImageField(
label='Profile Picture',
help_text='Upload a recent clear image.',
required=False,
)
birth_date = forms.DateField(
label='Birth Date',
widget=forms.widgets.DateInput(attrs={'type': 'date'}),
)
facebook = forms.URLField(
label='Facebook Profile URL'
)
class Meta:
model = Teacher
fields = [
'image',
'birth_date',
'facebook',
]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_tag = False
self.helper.layout = Layout(
Div(
Div('image', css_class="col-sm-6"),
Div('birth_date', css_class="col-sm-6"),
css_class='row',
),
FloatingField('facebook'),
)
models.py
class Teacher(models.Model):
user = models.OneToOneField(User,
on_delete=models.CASCADE,
primary_key=True)
image = models.ImageField(
default='profile_pics/default.jpg', upload_to=location, blank=True)
birth_date = models.DateField(null=True)
facebook = models.URLField(null=True, blank=True)
courses = models.ManyToManyField(Course,
related_name='teachers',
blank=True)
sessions = ChainedManyToManyField(Session,
chained_field='courses',
chained_model_field='course',
related_name='teachers',
blank=True)
batches = ChainedManyToManyField(Batch,
chained_field='sessions',
chained_model_field='session',
horizontal=True,
related_name='teachers',
blank=True)
last_updated = models.DateTimeField(auto_now=True)
def __str__(self):
return f'{self.user.first_name} {self.user.last_name}'
Я сделал то же самое для шаблона student-register.html
и он работает нормально. Я искал несколько часов, но не смог найти никакой ошибки в моем коде.
EDIT:
В views.py, если я устанавливаю teacher_form = StudentRegisterForm()
, StudentRegisterForm
появляется в шаблоне teacher-register.html
. Таким образом, я предполагаю, что проблема может быть где-то в class TeacherRegisterForm()
У меня как-то был такой код ниже в моем forms.py файле:
class TeacherRegisterForm(forms.ModelForm):
class Meta:
model = Teacher
fields = []
Я понятия не имею, откуда он взялся. Он переопределял мой основной класс TeacherRegisterForm()
, поэтому в шаблоне не появлялись поля.
Удалив его, вы решили проблему.