• Django重新整理4---ModelForm-set(批量处理数据)


    1.

    #引用modelformset
    from django.forms.models import modelformset_factory
    #必须继承forms.ModelForm!
    class StudentStudyRecordModelForm(forms.ModelForm):
        class Meta:
    #需要建立关联的表StudentStudyRecord
            model = StudentStudyRecord
    #score", "homework_note  显示的字段
            fields = ["score", "homework_note"]

    2.

    class RecordScoreView(View):
        def get(self, request, class_study_record_id):
            # modelformset_factory固定的写法 ,model=StudentStudyRecord这是需要关联的表名,form后边是我们上边的新建类名 ,  extra=0  不加它默认数据多一行
            model_formset_cls = modelformset_factory(model=StudentStudyRecord, form=StudentStudyRecordModelForm, extra=0)
            queryset = StudentStudyRecord.objects.filter(classstudyrecord=class_study_record_id)
            print(class_study_record_id)   #2 第2天的课程
            print("queryset",queryset)   #查询第2天课程的学生记录
            formset = model_formset_cls(queryset=queryset)
            return render(request, "record_score.html", locals())
    
        def post(self, request, class_study_record_id):
            model_formset_cls = modelformset_factory(model=StudentStudyRecord, form=StudentStudyRecordModelForm, extra=0)
            queryset = StudentStudyRecord.objects.filter(classstudyrecord=class_study_record_id)
            # print("request.POST", request.POST)
            formset = model_formset_cls(request.POST)
            #??????????????????????????????//
            print("formset",formset)
            print(123456789)
            #判断是否通过校验
            if formset.is_valid():
                formset.save()
            # print(formset.errors)
            return redirect(request.path)

    3.

    #record_score.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
    </head>
    <body>
    
    <h3>录入{{ class_study_record_obj.class_obj }}day{{ class_study_record_obj.day_num }}成绩</h3>
    
     <div class="panel panel-default">
            <div class="panel-heading">学习记录</div>
            <div class="panel-body">
                <div style=" 700px;margin: 0 auto;">
                    <form method="post" action="">
                        {% csrf_token %}
                                {# 固定的写法#}
                        {{ formset.management_form }}
                        <table class="table table-bordered">
                            <thead>
                            <tr>
                                <th>姓名</th>
                                <th>考勤</th>
                                <th>作业成绩</th>
                                <th>作业评语</th>
                            </tr>
                            </thead>
                            <tbody>
                            {% for form in formset %}
                                <tr>
                                    {{ form.id }}
                                    <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>
                        <input type="submit" value="保存">
                    </form>
                </div>
            </div>
        </div>
    </body>
    </html>
  • 相关阅读:
    Jeninks远程部署war包
    DOCKER中centos7的中文支持
    正则四
    正则三
    正则二
    正则一
    SHELL小练习
    SHELL用法九(awk练习)
    SHELL用法八(Grep语句)
    SHELL用法七(Sed语句)
  • 原文地址:https://www.cnblogs.com/lzqrkn/p/9995731.html
Copyright © 2020-2023  润新知