【问题标题】:Django:Child Model Fields Not RenderingDjango:子模型字段不渲染
【发布时间】:2020-09-02 11:50:39
【问题描述】:

所有外键、布尔值和选项字段都未在表单模板上呈现。但它们的标签标签正在呈现。 例如: 这是学校系统的“生成时间表”模型。 型号

class GT(models.Model):
        timetable_id = models.CharField(primary_key=True,max_length=200)
        period_number = models.ForeignKey(Ref_Period,on_delete=models.CASCADE)
        scheduled_date_and_time = models.ForeignKey(Ref_Calendar,on_delete=models.CASCADE)
        schedule_id = models.ForeignKey(Planned_Timetable,on_delete=models.CASCADE)
        subject = models.ForeignKey(Ref_Subject,on_delete=models.CASCADE)
        teacher_id = models.ForeignKey(Teacher,on_delete=models.CASCADE)

        def __str__(self):
            return str(self.teacher_id)

我已经在 forms.py 文件中导入了 forms.py

class GTForm(ModelForm):
    class Meta:
        model = GT
        fields = '__all__'

查看:

@login_required(login_url = 'main:loginPage')
@allowed_users(allowed_roles=['admin'])

def dalltt(request):

    gtform = GTForm()

    if request.method == "POST":
         gtform = GTForm(request.POST)
         print(gtform)
         if gtform.is_valid():
             gtform.save()
             print("saved")
             return redirect('/')
         else:
            print(gtform.errors)

    print(gtform)
    context = {'gtform':gtform}
    return render(request=request,template_name="main/dalltimetable.html",context=context)

模板(dalltimetable.html):

<form enctype="multipart/form-data" action="" method="POST" >
    {% csrf_token %}

    <table>
        <tr>
            <th>ID</th>
            <th>Time</th>
            <th>Day</th>
            <th>Subject</th>
            <th>{{ gtform.teacher_id.label_tag }} </th>

        </tr>
        <tr>
            <td>{{ gtform.teacher_id }} </td>
            <td>{{ gtform.teacher_id }}</td>


        </tr>
    </table>




    <input class="btn btn-warning" type="submit" value="Update">
    {{ form.name.errors }}
{{ form.non_field_errors }}
</form>

【问题讨论】:

    标签: python django forms model render


    【解决方案1】:

    试试看:

    @login_required(login_url = 'main:loginPage')
    @allowed_users(allowed_roles=['admin'])
    def dalltt(request):
        if request.method == "POST":
             gtform = GTForm(request.POST)
             print(gtform)
             if gtform.is_valid():
                 gtform.save()
                 print("saved")
                 return redirect('/')
             else:
                print(gtform.errors)
        else:
            gtform = GTForm()
    
        return render(request, 'main/dalltimetable.html', {'gtform': gtform })
    

    也可以尝试切换到基于类的视图来帮助样板:

    class dalltt(LoginRequiredMixin, FormView):
        template_name = 'main/dalltimetable.html'
        form_class = GTForm
        success_url = '/'
        login_url = 'main:loginPage'
    
        def form_valid(self, form):
            form.save()
            return super().form_valid(form)
    
        def form_invalid(self, form):
            print(form.errors)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-25
      • 1970-01-01
      • 2015-08-19
      • 1970-01-01
      • 1970-01-01
      • 2018-08-31
      • 2019-02-21
      • 2013-02-03
      相关资源
      最近更新 更多