zoukankan      html  css  js  c++  java
  • formset批量处理form表单数据

    Formset(表单集)是多个表单的集合。Formset在Web开发中应用很普遍,它可以让用户在同一个页面上提交多张表单,一键添加多个数据

    class StudentStudyRecordModel(forms.ModelForm):
        class Meta:
            model=StudentStudyRecord
            fields=['score','homework_note']
    view视图
    from django.forms.models import modelformset_factory

    class Student_study_record(View):
    def get(self,request):
            model_formset_cls=modelformset_factory(model=StudentStudyRecord,form=StudentStudyRecordModel,extra=0)
            queryset=StudentStudyRecord.objects.filter(classstudyrecord__id=request.GET.get('pk')) #批量操作的queryset
            formset=model_formset_cls(queryset=queryset)
            return render(request, 'students/Student_study_record.html', locals())
    
        def post(self,request):
            model_formset_cls = modelformset_factory(model=StudentStudyRecord, form=StudentStudyRecordModel, extra=0)
            formset=model_formset_cls(request.POST)  #与modelform校验基本一致,就是不用穿instance了
            if formset.is_valid():
                formset.save()
                return redirect('/class_study_record/')
            else:
                print('formset.errors##################',formset.errors)
                return self.get(request)

    templates模版

                <form action="" method="post" novalidate>
    
                    <table class="table table-hover table-striped" style="margin-top: 20px">
                        <thead>
                            <tr>
                                <td>编号</td>
                                <td>姓名</td>
                                <td>考勤</td>
                                <td>成绩</td>
                                <td>批语</td>
                            </tr>
                        </thead>
                        <tbody>
    {#                     必须有,不然会报错#}
                        {{ formset.management_form }}
                        {% for form in formset %}
                            <tr>
                                <td>{{ form.id }}</td>           # 必须有form.id
                                <td>{{ form.instance.student }}</td>    #instance是显示具体的某个对象的值,而不是多选框(不能修改)
                                <td>{{ form.instance.get_record_display }}</td>  
                                <td>{{ form.score }}</td>
                                <td>{{ form.homework_note }}</td>
                                {% csrf_token %}
                            </tr>
                        {% endfor %}
                        </tbody>
                    </table>
                    <button class=" btn btn-success btn-sm pull-right" style="margin: 30px;">提交</button>
                </form>




  • 相关阅读:
    性能优化之无阻塞加载脚步方法比较
    谈谈JS中的函数节流
    JS继承类相关试题
    JS继承之寄生类继承
    JS继承之借用构造函数继承和组合继承
    JS继承之原型继承
    谈谈JS的观察者模式(自定义事件)
    JS图片上传预览插件制作(兼容到IE6)
    前端HTML5几种存储方式的总结
    angularJS实用的开发技巧
  • 原文地址:https://www.cnblogs.com/amber-liu/p/10002675.html
Copyright © 2011-2022 走看看