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>

浙公网安备 33010602011771号