项目中关于记录模块的代码

更新学生学习记录:

在views.py 中

class StudyRecordDetailView(View):
    def get(self,request,class_record_id):
        #找到要跟进的班级信息:
        class_record_obj = models.ClassStudyRecord.objects.get(pk=class_record_id)
        all_study_record = models.StudentStudyRecord.objects.filter(classstudyrecord = class_record_obj)
        #把分数列表传到前端页面上显示:
        score_choices = models.StudentStudyRecord.score_choices
        
        return render(request,'student/study_record_detail.html',{'class_record_obj':class_record_obj,'all_study_record':all_study_record,'score_choices':score_choices})
    
    def post(self,request,class_record_id):
        
        for key , val in request.POST.items():
            if key == 'crsfmiddlewaretoken':
                continue
            field,pk = key.rsplit('_',1)
            models.StudentStudyRecord.objects.filter(**{'pk':pk}).update(**{field:val})
        return self.get(request,class_record_id)
        return redirect(reverse('study_decord',args=(class_record_id, )))
    
    
    
    #对重复性操作我们选择更改数据结构
        '''
        更改数据结构:
        {
            1:{'score':85,'homework_note':'333'},
            2: {'score':85,'homework_note':'333'},
        }
        '''
        data_dict = {}
         for key , val in request.POST.items():
            if key == 'crsfmiddlewaretoken':
                continue
            field,pk = key.rsplit('_',1)
            if pk in data_dict:
                data_dict[pk][field] = val
            else:
                data_dict[pk]={
                    field:val,
                }
           for spk,sdata in data_dict.items():
                models.StudentStudyRecord.objects.filter(**{'pk':spk}).update(**sdata)
            return redirect(reverse('study_decord',args=(class_record_id, )))
        
    
    

study_record_detail.html

<div class="container">

    <form action="" method="post">
         {% csrf_token %}

         <table class="table table-hover table-striped">
               <thead>
                    <tr>
                        <th>编号</th><!--表头-->
                        <th>姓名</th>
                        <th>考勤</th>
                        <th>成绩</th>
                        <th>批语</th>
                    </tr>
               </thead>
               <tbody>
                    {% for studentstudyrecord in all_study_recored %}
                      <tr>
                          <td>{{ forloop.counter }}</td><!--表格单元-->
                          <td>{{ studentstudyrecord.student }}</td>
                          <td>{{ studentstudyrecord.get_record_display }}</td>

                          <td>
                              <select name="score_{{ studentstudyrecord.pk }}" id="">
                            {% for choice in score_choices %}
                                  {% if studentstudyrecord.score == choice.0 }
                                      <option value='{{choice.0}}' selected>
                                          {{ choice.1 }}
                                      </option>
                                {% else %}
                                      <option value='{{ choice.0 }}'>
                                          {{ choice.1}}
                                      </option>


                              </select>
                          </td>
                        <td>
                            <textarea name="homework_note_{{ studentstudyrecord.pk }}" id="" cols="20" rows="1" class="form-control">{{ studentstudyrecord.homework_note|default:"" }}</textarea>
                            <!--default是设置默认值-->
                        </td>

                      </tr>
                    {% endfor %}

               </tbody>
         </table>
        <input type="submit" class="btn btn-success pull-right" value="保存">
    </form>

</div>

<hr>
</body>
</html>

知识点补充:

  • selected属性
带有预先选定的选项下来列表:
        <option selected='selected'>aabb</option>
定义和用法:
    selected 属性规定在页面加载时预先选定该选项。
    被预选的选项会显示在下拉列表的最前面的位置。
    也可以在页面加载后通过JavaScript设置selected属性。
实例:
<html>
<body>

<select>
  <option>Volvo</option>
  <option selected="selected">Saab</option>
  <option>Mercedes</option>
  <option>Audi</option>
</select>

</body>
</html>
这时多选框显示Saab  下拉后显示Volvo,Mercedes,Audi
  • textarea
文本描述 textarea
定义和用法:
    <textarea> 标签定义多行的文本输入控件。
    文本区可容纳无限量的文本,其中的文本默认字体是等宽字体。
    可以通过cols和rows属性来规定textarea的尺寸,不过更好的办法是使用css的height和width属性。
实例:
<textarea rows="3" cols="20">

</textarea>
  • table标签
HTML <table>标签
<table border='1'>
    <tr>
        <th>Month</th>
        <th>Savings</th>
    </tr>   
    <tr>
        <td>January</td>
        <td>$100</td>
    </tr>
</table>
定义和用法:
    <table>标签定义HTML表格
    简单的HTML表格由table元素以及一个或多个tr、th或td元素组成。
    tr元素定义表格行,th元素定义表头,td元素定义表格单元
    
        
  • forloop

    forloop.counter    表示当前迭代数从1开始
    forloop.counter0   表示从0开始
    forloop.first      判断此循环是否是第一次循环
    
点击学详,进入待编辑的班级:
<td><a href='{% url 'study_decord' record.pk} %'>学详</a></td>

猜你喜欢

转载自www.cnblogs.com/Zhao159461/p/11087176.html