django 项目 crm数据锁 和 快速展示记录创建

课程记录的管理:
根据班级去创建课程记录
展示课程记录
修改课程记录
学生的学习记录(上课记录的管理)
根据班级.课程记录创建学习记录
展示学习记录
编辑学习记录
表锁:
行锁:(在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})  #传过去
 
 

猜你喜欢

转载自www.cnblogs.com/lnrick/p/9754154.html