知识点1
前面我们实现了这个功能,就是在models中如果有了choice选项,我们可以实现在页面显示这个chocice的value值,而不是key值,我们这个知识点就是在优化一下这个点
首先如果表中有多个有choice的字段,我们难道要为每个字段都写一个函数吗,当然这个是现实的,但是确认是繁琐的
比如我们要展示2个有choice的字段,我们就需要为每个字段写2个函数
def list_record(self,obj=None,header=False): if header: return "签到情况" else: print(obj.record) print(obj.get_record_display()) return obj.get_record_display() def list_score(self,obj=None,header=False): if header: return "成绩" else: print(obj.score) print(obj.get_score_display()) return obj.get_score_display()
我们可以在showlist中为这个字段做单独的处理,请看下面的代码
if field_obj.choices: print(field_obj.choices,"field_obj.choices",sep="<++++++++++++++++++++++++>") temp = getattr(obj,"get_" + i + "_display") else: temp = getattr(obj,i)
我们打印的字段的choice的值如下
所以我们这里可以利用反射,实现get_字段_display的方法,重点是这里
这样,我们在list_display中就可以直接写字段了
list_display = ["student","score","record","course_record"]
知识点2
复习一下添加一个批量操作的函数的方法,具体的代码如下
class CourseRecordconfig(Starkclass): def test_action(self, request,queryset): print(queryset,"测试生成学习记录2") for cr in queryset: class_course = cr.class_obj.course class_semester = cr.class_obj.semester temp = models.Student.objects.filter(class_list=cr.class_obj) for student in temp: models.StudyRecord.objects.create( student = student, course_record = cr ) print(student,"测试生成学习记录3") actions = [test_action,] # test_action.__name__ = "测试批量操作的函数" test_action.short_description = "测试生成学习记录"