crm作业知识点集合[二]

知识点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 = "测试生成学习记录"

  

 

猜你喜欢

转载自www.cnblogs.com/bainianminguo/p/10230705.html
今日推荐