简体   繁体   English

Django 表单未显示在模板上

[英]Django form is not showing up on template

I am trying to show two forms ( UserRegisterForm and TeacherRegisterForm ) in one template.我试图在一个模板中显示两种表单( UserRegisterFormTeacherRegisterForm )。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM