[英]Django form is not showing up on template
I am trying to show two forms ( UserRegisterForm
and TeacherRegisterForm
) in one template.我试图在一个模板中显示两种表单(
UserRegisterForm
和TeacherRegisterForm
)。 But, only the UserRegisterForm
is showing up in the rendered HTML.但是,只有
UserRegisterForm
显示在呈现的 HTML 中。
teacher-register.html教师注册.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网址.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视图.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表格.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模型.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}'
I did the same thing for student-register.html
template and it's working fine.我为
student-register.html
模板做了同样的事情,它工作正常。 I've searched for hours but couldn't find any bug in my code.我已经搜索了几个小时,但在我的代码中找不到任何错误。
EDIT:编辑:
In views.py , if I set teacher_form = StudentRegisterForm()
, the StudentRegisterForm
appears in the teacher-register.html
template.在views.py中,如果我设置
teacher_form = StudentRegisterForm()
, StudentRegisterForm
出现在teacher-register.html
模板中。 So, I guess the problem might be somewhere in the class TeacherRegisterForm()
所以,我想问题可能出在
class TeacherRegisterForm()
的某个地方
I somehow had this code way below in my forms.py file:我的forms.py文件中不知何故有以下代码:
class TeacherRegisterForm(forms.ModelForm):
class Meta:
model = Teacher
fields = []
I have no idea where it came from.我不知道它是从哪里来的。 It was overriding my main
TeacherRegisterForm()
class, which is why no fields were appearing in the template.它覆盖了我的主要
TeacherRegisterForm()
类,这就是模板中没有出现任何字段的原因。
Removing it solved the problem.删除它解决了这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.