课程记录的管理:
根据班级去创建课程记录
展示课程记录
修改课程记录
学生的学习记录(上课记录的管理)
根据班级.课程记录创建学习记录
展示学习记录
编辑学习记录
表锁:
行锁:(在sql中):
例子: 事物+锁
begin; 开始
select * from app01 where id =1 for update; 为了更新,查询可以
commit; 结束
在django中先开启事物开启锁
from django.db import transaction #引入事物
def multi_apply(self, request):
obj_ids = request.POST.getlist('id')
count = models.Customer.objects.filter(consultant=request.user).count()
if count + len(obj_ids) > settings.MAX_CUSTOMER_NUM:
return HttpResponse('做人不贪心,先根跟进自己的就行了')
flag = False
with transaction.atomic(): #事物函数
old = models.Customer.objects.filter(id__in=obj_ids, consultant__isnull=True).select_for_update() #先查询到并且加上select_for_update() 锁
if len(obj_ids) == len(old): #判断长度是否一致
time.sleep(10)
models.Customer.objects.filter(id__in=obj_ids).update(consultant=request.user) #执行更改
flag = True
if not flag: #进行判断是否执行成功
return HttpResponse('手速太慢,已经别别人抢走了')
在django中使用逻辑限制:限制销售的客户
在settings中:MAX_CUSTOMER_NUM = 150
在views中引入:
from django.conf import settings #引入
使用时settings.MAX_CUSTOMER_NUM 来使用
批量初识化学习记录::(为每一个学生建立)
def multi_init(self, request):
course_ids = request.POST.getlist('id') #查询到id
course_obj_list = models.CourseRecord.objects.filter(id__in=course_ids) #在数据库中找到对象
for course_obj in course_obj_list:
stu_list = course_obj.re_class.customer_set.all().filter(status='studying') #循环找到要找的参数
studury_record_list = [] #建立空列表
for stu_obj in stu_list: #循环所有的参数
#models.StudyRecord.objects.create(student=stu_obj,course_record=course_obj) #一种写法
studury_record_list.append(models.StudyRecord(student=stu_obj, course_record=course_obj)) #建立空的models.StudyRecord,进行加入到列表中
models.StudyRecord.objects.bulk_create(studury_record_list, batch_size=3) #使用bulk_create进行添加 batch_size限制条数
展示记录:
forms中:
class StudyRecordForm(BaseForm):
class Meta:
model = models.StudyRecord
fields = ['attendance','score','homework_note','note']
在html中:
{% extends 'layout.html' %}
{% block content %}
<div class="panel panel-primary">
<div class="panel-heading">学习记录列表</div>
<div class="panel-body">
<form action="" method="post" class="form-inline">
{% csrf_token %}
{{ form_obj.management_form }} #必写的
<table class="table table-hover">
<thead>
<tr>
<th>学生姓名</th>
<th>考勤</th>
<th>成绩</th>
<th>作业批注</th>
<th>备注</th>
</tr>
</thead>
<tbody>
{% for studyrecord in form_obj %}
<tr>{{ studyrecord.id }} #必写的
<td>{{ studyrecord.instance.student }}
</td> #studyrecord.instance,当前学生的
<td>{{ studyrecord.attendance }}</td>
<td>{{ studyrecord.score }}</td>
<td>{{ studyrecord.homework_note }}</td>
<td>{{ studyrecord.note }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<button class="btn btn-primary">保存</button>
</form>
<div class="text-center">
<nav aria-label="Page navigation">
<ul class="pagination">
{{ page_html }}
</ul>
</nav>
</div>
</div>
</div>
{% endblock %}
在views:
from django.forms import modelformset_factory #先引入
def study_record(request, course_record_id):
FormSet = modelformset_factory(models.StudyRecord, StudyRecordForm, extra=0) #在这里实例化一个类 顺序:mdoels,forms,extra(这是现实空白否)
queryset = models.StudyRecord.objects.filter(course_record_id=course_record_id)
#在数据库中找到对象是queryset对象
form_obj = FormSet(queryset=queryset) #使用类 中的queryset赋值
if request.method == 'POST':
form_obj = FormSet(request.POST)
if form_obj.is_valid():
form_obj.save()
return render(request, 'study_record_list.html', {'form_obj': form_obj}) #传过去