modelform set

modelform  set

views.py

class ScoreRecordModelForm3(forms.ModelForm):

''' 为modelformset服务的modelform组件 '''

   class Meta:

       model = StudentStudyRecord 

      fields=['score','homework_note','student']# 只把这两个字段渲染成 表单,所以对其他字段无需进行校验,到模板渲染的时候也只能将这两个字段渲染成表单形式

  def __init__(self,*args,**kwargs):

    super().__init__(*args,**kwargs)

     for field in self.fields.values():

        field.widget.attrs.update({'class':'form-control'})

         from django.forms.models import modelformset_factory

        class ScoreRecord(View):

          def get(self,request,id):

           ''' 点击记录成绩走的路线 '''

# print(id) # 产生model_formset_cls 类 model_formset_cls=modelformset_factory(model=StudentStudyRecord,form=ScoreRecordModelForm3,extra=0) # 过滤找出要渲染的queryset student_record_obj = StudentStudyRecord.objects.filter(classstudyrecord=id) formset=model_formset_cls(queryset=student_record_obj) return render(request,'score_record.html',locals()) def post(self,request,id): model_formset_cls=modelformset_factory(model=StudentStudyRecord,form=ScoreRecordModelForm3,extra=0) queryset = StudentStudyRecord.objects.filter(classstudyrecord=id) formset = model_formset_cls(request.POST) #此处没有instance if formset.is_valid(): formset.save()

前端模板

  <form action="" method="post">
            <table id="example2" class="text-center table table-bordered table-hover">
                <thead>
                <tr>

                    <th>编号</th>
                    <th>姓名</th>
                    <th>考勤</th>
                    <th>成绩</th>
                    <th>批语</th>


                </tr>
                </thead>
                {% csrf_token %}}
                {{ formset.management_form }}
                {#                //只有使用modelformset/formset渲染页面时,加上#}
                <tbody>
            

{% for form in formset %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ form.instance.student }}</td> 表示不再渲染成表单
<td>{{ form.instance.get_record_display }} </td>
<td>{{ form.score }} </td> #渲染成表单
<td>{{ form.homework_note }}</td>#渲染成表单

</tr>
{% endfor %}


</tbody>
</table>

{# #}

<button class="btn btn-success pull-right" >提交</button>
</form>
{# </div>#}
{# </div>#}

<!-- /.content -->

<br>


</div>

 

posted @ 2018-11-21 16:40  团子emma  阅读(87)  评论(0)    收藏  举报