CRM——讲师与学生

一、讲师和学生简介

二、配置study_record

1、给学习记录配置自定义配置

class StudyConfig(ModelStark):
    def display_record(self, obj=None, header=False):
        if header:
            return "签到"
        return obj.get_record_display()     # 存的值对应的中文

    def display_score(self, obj=None, header=False):
        if header:
            return "成绩"
        return obj.get_score_display()     # 存的值对应的中文

    list_display = ["student", "course_record", display_record, display_score]

site.register(StudyRecord, StudentConfig)

  不取字段值而是拼上get和display取存的值对应的中文。

2、修改ModelStark中get_body方法全局处理记录对象包含choices情况

  在models中choices对应的是一个元组。

class ShowList(object):
    """展示页面类"""
    def get_body(self):
        """构建表单数据"""
        """代码省略"""
            # 针对choices属性
            if field_obj.choices:
                val = getattr(obj, "get_" + field + "_display")
            else:
                val = getattr(obj, field)   # 拿到的关联对象  处理不了多对多

##################自定义配置#############
class StudyConfig(ModelStark):
    list_display = ["student", "course_record", "record", "score"]

site.register(StudyRecord, StudentConfig)

  录入学习记录:

  

三、批量生成学习记录

1、定制CourseRecod批量功能

class CourseRecordConfig(ModelStark):
    list_display = ["class_obj", "day_num", "teacher"]

    def patch_studyRecord(self, request, queryset):
        print("=====>",queryset)
        """
        提交批量操作获取的queryset
        <QuerySet [<CourseRecord: python基础(9期) day94>, <CourseRecord: python基础(9期) day95>]>
        """
        temp = []
        for course_record in queryset:
            # 过滤出班级所有的学生  学生表classlist关联班级表
            student_list = Student.objects.filter(class_list__id=course_record.class_obj.pk)   # 学生的班级id和课程记录班级的id进行比对  拿到班级所有的学生
            for student in student_list:   # 拿到学生对象
                obj = StudyRecord(student=student, course_record=course_record)
                temp.append(obj)

        StudyRecord.objects.bulk_create(temp)   # 批量插入

    actions = [patch_studyRecord, ]
    patch_studyRecord.short_description = "批量生产学习记录"
    """
    def get_action_list(self):
        # 获取自定义批量操作
        temp = []
        for action in self.actions:
            temp.append({
                "name": action.__name__,    # 函数.__name__:拿到函数名
                "desc": action.short_description
            })  # [{"name": "patch_init", "desc": "批量处理"}]
        return temp
    """

site.register(CourseRecord, CourseRecordConfig)

  注意

(1)批量插入操作:

StudyRecord.objects.bulk_create(temp)

(2)跨表查询班级所有的学生

# 过滤出班级所有的学生  学生表classlist关联班级表
student_list = Student.objects.filter(class_list__id=course_record.class_obj.pk)   # 学生的班级id和课程记录班级的id进行比对  拿到班级所有的学生

(3)批量操作别名描述short_description

  这是由于在Modelstark中源码get_action_list有关于action别名的配置:

def get_action_list(self):
    # 获取自定义批量操作
    temp = []
    for action in self.actions:
        temp.append({
            "name": action.__name__,    # 函数.__name__:拿到函数名
            "desc": action.short_description
        })  # [{"name": "patch_init", "desc": "批量处理"}]
    return temp

2、批量生成学习记录

  

  学习记录生产成功:

  

猜你喜欢

转载自www.cnblogs.com/xiugeng/p/9544568.html
CRM