zoukankan      html  css  js  c++  java
  • 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})  #传过去
     
     

  • 相关阅读:
    Android开发:fragment将事件传递回activity
    Android开发:使用DialogFragment实现dialog自定义布局
    菜鸟的开始
    SAP HANA中创建计算视图(Calculation View)
    SAP HANA studio 创建分析视图
    SAP HANA 创建属性视图
    SAP HANA 能做什么
    SAP HANA 是什么?
    SAP BW 例程(Routine)【开始例程、关键值或特性的例程、结束例程】
    DSO分类及应用
  • 原文地址:https://www.cnblogs.com/lnrick/p/9754154.html
Copyright © 2011-2022 走看看