一、讲师和学生简介
二、配置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、批量生成学习记录
学习记录生产成功: