zoukankan      html  css  js  c++  java
  • CRM admin使用actions批量生成上课记录

    使用actions字段里的函数处理选择一个班级的上课记录,然后创建这个班级学生的学习记录

    1、在admin.py文件中加上CourseRecordAdmin,StudyRecordAdmin

    actions字段里面的函数会有三个请求参数:self==CourseRecordAdmin,rquest ==request.Post,quertset==<QuerySet [<CourseRecord: 上海浦东 python全栈 4 1>

    通过请求的queryset的值使用enrollment_set获取enrollment表中的所有数据

    queryset[0].from_class.enrollment_set.all()

    生成这个班级的学生学习记录使用bulk_creact去批量创建,先把数据都存到一个变量里面

    models.StudyRecord.objects.bulk_create(study_obj)

    如果个班级的学生记录创建了,再次去创建就会报如下的错,解决是用try捕捉

    #(1062, "Duplicate entry '1-1' for key 'crm_studyrecord_student_id_course_record_id_24d12464_uniq'")

    在创建学习记录StudyRecord的数据时候,student这个字段是一个外键Enrollment表的对象,我是弄成了获取一个对象下面的一个值

    #print("enroll_obj.customer",enroll_obj.customer),就会报如下错误:
     #Cannot assign "<Customer: 190837349120>": "StudyRecord.student" must be a "Enrollment" instance.

    django使用list_editable属性可以编辑,short_description actions函数名显示中文名

    这个小功能的所有代码如下:

    class CourseRecordAdmin(admin.ModelAdmin):
        
        list_display =["from_class","teacher","outline","day_num"]
        actions = ["initialization_course_record"]
        def initialization_course_record(self,request,queryset):
            #只能选择一条一个班级的上课记录
            print("self,request,queryset:",self,request,queryset)
            if len(queryset)>1:
                return HttpResponse("只能选择一条记录")
            #找出这个班报名的学生数
            #print("queryset[0]:",queryset[0].from_class.enrollment_set.all())
            #(1062, "Duplicate entry '1-1' for key 'crm_studyrecord_student_id_course_record_id_24d12464_uniq'")
            #Cannot assign "<Customer: 190837349120>": "StudyRecord.student" must be a "Enrollment" instance.
            study_obj=[]
            for enroll_obj in queryset[0].from_class.enrollment_set.all():
                #print("enroll_obj.customer",enroll_obj.customer)
                #如果有了就查询没有就创建,不然会报唯一性错误
                #这个是每一条一条的提交事物,如果数据太大的话性能会比较差
                # models.StudyRecord.objects.get_or_create(student=enroll_obj,
                #                                   course_record=queryset[0],
                #                                   attendance =0,
                #                                   score=0)
                study_obj.append(models.StudyRecord(
                    student=enroll_obj,
                    course_record=queryset[0],
                    attendance=0,
                    score=0))
            try:
                #bulk_create可以创建很多个但是这个事务是提交的如50条,50条失败
                models.StudyRecord.objects.bulk_create(study_obj)
                return redirect("/admin/crm/studyrecord/")
            except Exception as e:
                return HttpResponse("有些数据已经有学习记录了")
        #actions函数名显示中文名short_description
        initialization_course_record.short_description = "初始化本节上课记录"
    
    class StudyRecordAdmin(admin.ModelAdmin):
        list_display=["student","course_record","attendance","score"]
        list_filter = ["course_record","score","attendance"]
        #可编辑的
        list_editable = ["score","attendance"]
     
  • 相关阅读:
    安装archlinux的另辟蹊径的命令及心得
    deepin15.11安装N卡驱动,实测!!!(可解决N卡电脑关机卡屏)
    js实现简单下载
    微信公众号的开发 该公众号提供的服务出现故障,请稍后再试
    线程池的创建
    多线程,生产者消费者模型(生产馒头,消费馒头)
    第1章 Java IO系统 下
    T01章[Java IO系统] 作业
    第1章 Java IO系统
    用集合实现一个控制台版的学生管理系统
  • 原文地址:https://www.cnblogs.com/venvive/p/11484068.html
Copyright © 2011-2022 走看看