class UserInfoConfig(v1.StarkConfig): def displsy_gender(self, obj=None, is_header=False): if is_header: return "性别" return obj.get_gender_display() def display_depart(self, obj=None, is_header=False): if is_header: return "部门" return obj.depart.caption def display_roles(self, obj=None, is_header=False): result = [] if is_header: return "角色" for i in obj.roles.all(): result.append(i.title) return "__".join(result) # model_form_class = UserInfoForm list_display = [ "id", "name", "email", displsy_gender, display_depart, display_roles ] comb_filter = [ v1.FilterOption("gender", is_choice=True), v1.FilterOption("depart", condition={"id__gt": 1}), v1.FilterOption("roles", True) ] show_comb_filter = True
class UserInfoStarkConfig(v1.StarkConfig): def display_gender(self, obj=None, is_header=None): if is_header: return "性别" return obj.get_gender_display() def display_depart(self, obj=None, is_header=None): if is_header: return "部门" return obj.depart.caption def display_roles(self, obj=None, is_header=None): if is_header: return "角色" role_list = [] for x in obj.roles.all(): role_list.append(x.title) return ",".join(role_list) list_display = [ "id", "name", "email", display_gender, display_depart, display_roles ] comb_filter = [ v1.FilterOption('gender', is_choice=True), v1.FilterOption('depart', ), v1.FilterOption('roles', True), ] query_field = [ "id__contains", "name__contains", "email__contains", "depart__caption__contains" ] show_actions = True show_query_field = True
class UserInfoConfig(v1.StarkConfig): def get_gender(self, obj=None, is_header=None): if is_header: return "性别" return obj.get_gender_display() def get_depart(self, obj=None, is_header=None): if is_header: return '所属部门' return obj.depart.caption def get_roles(self, obj=None, is_header=None): if is_header: return '角色' html = [] role_list = obj.roles.all() for role in role_list: ss = role.title html.append(ss) html = ','.join(html) return html list_display = ['id', 'name', 'email', get_gender, get_depart, get_roles] #这个显示页面有多对多和FK以及choices comb_filter = [ v1.FilterOption('gender', is_choice=True), v1.FilterOption('depart', ), v1.FilterOption('roles', True) ]
class UserInfoConfig(v1.StarkConfig): show_add_btn = True show_search_form = True search_fields = ['name__contains', 'email__contains'] edit_link = ['name'] def display_gender(self, obj=None, is_header=False): if is_header: return '性别' # return obj.gender return obj.get_gender_display() def display_depart(self, obj=None, is_header=False): if is_header: return '部门' return obj.depart.title comb_filter = [ v1.FilterOption('gender', is_choice=True), v1.FilterOption('depart', ) ] list_display = [ 'name', 'username', 'email', display_gender, display_depart ]
class ClassListConfig(v1.StarkConfig): def course_semester(self,obj=None,is_header=False): if is_header: return '班级' return "%s(%s期)" %(obj.course.name,obj.semester,) def num(self,obj=None,is_header=False): if is_header: return '人数' return 666 def display_teachers(self, obj=None, is_header=False): if is_header: return '任课老师' html = [] teacher_list = obj.teachers.all() for teacher in teacher_list: html.append(teacher.name) return ",".join(html) comb_filter = [ v1.FilterOption('school', ), v1.FilterOption('course', ) ] list_display = ['school','course','semester','price','start_date','graduate_date','memo',display_teachers,course_semester,num,'tutor'] edit_link = [course_semester,]
class UserInfoConfig(v1.StarkConfig): def display_gender(self, obj=None, is_header=False): if is_header: return '性别' # return obj.gender return obj.get_gender_display() def display_depart(self, obj=None, is_header=False): if is_header: return '部门' return obj.depart.caption def display_roles(self, obj=None, is_header=False): if is_header: return '角色' html = [] role_list = obj.roles.all() for role in role_list: html.append(role.title) return ",".join(html) list_display = [ 'id', 'name', 'email', display_gender, display_depart, display_roles ] comb_filter = [ v1.FilterOption('gender', is_choice=True), v1.FilterOption('depart', condition={'id__gt': 3}), v1.FilterOption('roles', True), ]
class UserInfoConfig(v1.StarkConfig): def display_gender(self, obj=None, is_header=False): if is_header: return '性别' return obj.get_gender_display() # 拿到字段 def display_depart(self, obj=None, is_header=False): if is_header: return '部门' return obj.depart.caption def display_roles(self, obj=None, is_header=False): if is_header: return '角色' html = [] role_list = obj.roles.all() for role in role_list: html.append(role.title) return ','.join(html) list_display = [ 'id', 'name', 'email', display_depart, display_gender, display_roles ] # 组合搜索 comb_filter = [ # 将配置项,改成对象的形式. 这个类里面是有两个参数的 v1.FilterOption('gender', is_choice=True), v1.FilterOption('depart'), v1.FilterOption('roles', True), # 这是三个option对象 ]
class ClassListConfig(v1.StarkConfig): def course_semester(self, obj=None, is_header=False): if is_header: return '班级与期数' return ('%s(%s期)') % (obj.course, obj.semester) def num(self, obj=None, is_header=False): if is_header: return '人数' return obj.student_set.all().count() def get_teacher(self, obj=None, is_header=None): if is_header: return '咨询课程' html = [] course_list = obj.teachers.all() for role in course_list: ss = role.name html.append(ss) html = ','.join(html) return html list_display = [ 'school', course_semester, num, 'price', 'start_date', 'graduate_date', 'memo', get_teacher, 'tutor' ] search_fields = [ 'school__contains', 'course__contains', 'semester__contains', 'price__contains', 'start_date__contains', 'graduate_date__contains' ] # 这是用来搜索的,不要把外键放在里面 comb_filter = [ v1.FilterOption('school', ), v1.FilterOption('course', ), ]
class ClassListConfig(BasePermission,v1.StarkConfig): def course_semester(self,obj=None,is_header=None): if is_header: return '班级' return '%s(%s期)'%(obj.course.name,obj.semester) def num(self,obj=None,is_header=None): if is_header: return '人数' return obj.student_set.count() def teacher(self,obj=None,is_header=None): if is_header: return '教师' obj_list = obj.teachers.all() l = [] [l.append(obj.name) for obj in obj_list] # for obj in obj_list: # l.append(obj.name) return ','.join(l) # 组合搜索(根据校区,课程) comb_filter = [ v1.FilterOption('school'), v1.FilterOption('course'), v1.FilterOption('teachers'), ] # ##############popup增加时,是否将新增的数据显示到页面中(获取条件) ############# show_search_form = True list_display = ['school',course_semester,num,'start_date',teacher] edit_link = ['school']
class UserInfoConfig(v1.StarkConfig): def display_gender(self, obj=None, is_header=False): if is_header: return '性别' # return obj.gender return obj.get_gender_display() def display_depart(self, obj=None, is_header=False): if is_header: return '部门' return obj.depart.caption def display_roles(self, obj=None, is_header=False): if is_header: return '角色' html = [] role_list = obj.roles.all() for role in role_list: html.append(role.title) return ",".join(html) list_display = [ 'id', 'name', 'email', display_gender, display_depart, display_roles ] comb_filter = [ v1.FilterOption('gender', is_choice=True), v1.FilterOption('depart', condition={'id__gt': 3}), v1.FilterOption('roles', True), ] # 是否显示搜索 show_search_form = True search_fields = ['name__contains', 'email__contains'] # 批量删除和初始化 show_actions = True def multi_del(self, request): pk_list = request.POST.getlist('pk') self.model_class.objects.filter(id__in=pk_list).delete() return HttpResponse('删除成功') # return redirect("http://www.baidu.com") multi_del.short_desc = "批量删除" def multi_init(self, request): pk_list = request.POST.getlist('pk') #self.model_class.objects.filter(id__in=pk_list).delete() return HttpResponse('删除成功') #return redirect("http://www.baidu.com") multi_init.short_desc = "初始化" actions = [multi_del, multi_init]
class UserInfoConfig(v1.StarkConfig): def display_gender(self, obj=None, is_head=False): if is_head: return '性别' return obj.get_gender_display() def dispaly_depart(self, obj=None, is_head=False): if is_head: return '部门' return obj.depart.caption def dispaly_roles(self, obj=None, is_head=False): if is_head: return '角色' roles = obj.roles.all() l = [] for role in roles: l.append(role.title) return ','.join(l) list_display = [ 'id', "name", 'email', display_gender, dispaly_depart, dispaly_roles ] model_class_form = UserInfoForm show_search_form = True search_fileds = ['name__contains', 'email__contains'] show_action = True def multi_del(self, request): id_list = request.POST.getlist('pk') # print(id_list,'****------') self.model_class.objects.filter(id__in=id_list).delete() return redirect(self.get_list_url()) multi_del.short_desc = '批量删除' def multi_info(self, request): pass multi_info.short_desc = '批量初始化' action_func_list = [multi_del, multi_info] combine_seach = [ v1.FilterOption('gender', is_choice=True), v1.FilterOption('depart'), v1.FilterOption('roles', is_choice=False, is_multi=True), ]
class UserInfoConfig(v1.StarkConfig): #让性别显示的是汉字 def display_gender(self, obj=None, is_header=False): if is_header: return '性别' return obj.get_gender_display() #显示部门 def display_depart(self, obj=None, is_header=False): if is_header: return '部门' return obj.depart.caption #显示角色 def display_roles(self, obj=None, is_header=False): if is_header: return '角色' html = [] role_list = obj.roles.all() for role in role_list: html.append(role.title) return ",".join(html) list_display = [ 'id', 'name', 'email', display_gender, display_depart, display_roles ] comb_filter = [ v1.FilterOption('gender', is_choice=True), v1.FilterOption('depart'), #v1.FilterOption('depart'),如果不加condition={'id__gt': 2} ---condition 表示对显示的数据进行筛选 v1.FilterOption('roles', True), ] def multi_del(self, request): # print(request.POST) pk_list = request.POST.getlist('pk') # print(pk_list) self.model_class.objects.filter(id__in=pk_list).delete() multi_del.short_desc = "批量删除" def multi_init(self, request): pk_list = request.POST.getlist('pk') multi_init.short_desc = "初始化" actions = [multi_del, multi_init]
class PaymentRecordConfig(BasePermission,v1.StarkConfig): def customer_display(self,obj=None,is_head=False): if is_head: return '客户' return obj.customer.name def class_list_display(self,obj=None,is_head=False): if is_head: return '班级' return obj.class_list.semester def pay_type_display(self,obj=None,is_head=False): if is_head: return '费用类型' return obj.get_pay_type_display() def consultant_display(self,obj=None,is_head=False): if is_head: return '负责老师' return obj.consultant.name list_display = [customer_display,class_list_display,pay_type_display,'paid_fee','turnover','quote','note','date'] show_action = True def multi_del(self, request): id_list = request.POST.getlist('pk') # print(id_list,'****------') self.model_class.objects.filter(id__in=id_list).delete() return redirect(self.get_list_url()) multi_del.short_desc = '批量删除' def multi_info(self, request): pass multi_info.short_desc = '批量初始化' action_func_list = [multi_del, multi_info] combine_seach = [ v1.FilterOption('class_list'), v1.FilterOption('pay_type',is_choice=True), v1.FilterOption('consultant'), ]
class StudyRecordConfig(v1.StarkConfig): show_add_btn = False def display_record(self,obj=None,is_header=False): if is_header: return '出勤' return obj.get_record_display() # 学生学习记录 comb_filter = [ v1.FilterOption('course_record') ] def action_checked(self,request): pk_list = request.POST.getlist('pk') models.StudyRecord.objects.filter(id__in=pk_list).update(record='checked') action_checked.short_desc= "签到" def action_vacate(self,request): pk_list = request.POST.getlist('pk') models.StudyRecord.objects.filter(id__in=pk_list).update(record='vacate') action_vacate.short_desc= "请假" def action_late(self,request): pk_list=request.POST.getlist('pk') models.StudyRecord.objects.filter(id__in=pk_list).update(record='late') action_late.short_desc= "迟到" def action_noshow(self,request): pk_list = request.POST.getlist("pk") models.StudyRecord.objects.filter(id__in=pk_list).update(record='noshow') action_noshow.short_desc= "缺勤" def action_leave_early(self,request): pk_list = request.POST.getlist("pk") models.StudyRecord.objects.filter(id__in=pk_list).update(record='leave_early') action_leave_early.short_desc= "早退" show_actions = True actions = [action_checked, action_vacate, action_late, action_noshow, action_leave_early] list_display = ['course_record','student','record','score','homework_note','note','homework','stu_memo','date',display_record]
class ConsultRecordConfig(v1.StarkConfig): def display_customer(self, obj=None, is_header=None): if is_header: return "所咨询客户" return obj.customer.name def display_consultant(self, obj=None, is_header=None): if is_header: return "跟踪人" return obj.consultant.name def display_date(self, obj=None, is_header=None): if is_header: return "跟进日期" return obj.date.strftime("%Y-%m-%d") def display_note(self, obj=None, is_header=None): if is_header: return "跟进内容" return obj.note list_display = [ display_customer, display_consultant, display_date, display_note ] # show_add_btn = True edit_link = [display_customer] comb_filter = [v1.FilterOption("customer")]
class UserInfoConfig(v1.StarkConfig): show_search_form = True # 搜索框 search_fields = ['name__contains', 'email__contains'] # 模糊搜索 show_actions = True # 批量操作框 # 批量删除 def multi_del(self, request): pk_list = request.POST.getlist('pk') # 得到所有的勾选的项 self.model_class.objects.filter(id__in=pk_list).delete() return HttpResponse('删除成功') # return redirect("http://www.baidu.com") multi_del.desc_text = "批量删除" # 给函数内部加一个字段 actions = [multi_del] # 给actions加入定制的功能 def display_gender(self, obj=None, is_header=False): if is_header: return '性别' return obj.get_gender_display() #get_字段名,可拿出choices里的内容 def display_depart(self, obj=None, is_header=False): if is_header: return '部门' return obj.depart.caption #对象.字段 def display_roles(self, obj=None, is_header=False): if is_header: return '角色' html = [] role_list = obj.roles.all() for role in role_list: html.append(role.title) return "、".join(html) #多对多,循环取出,用顿号隔开显示 list_display = [ 'id', 'name', 'email', display_gender, display_depart, display_roles ] #条件筛选 comb_filter = [ # FilterOption('字段', 是否多选, 条件, 是否是choice), v1.FilterOption('gender', is_choice=True), #关键字传参,代表是choice v1.FilterOption('depart'), #, condition={'id__gt': 3} v1.FilterOption('roles', True), #True传入,代表是多选 ]
class StudyRecordConfig(BasePermission, v1.StarkConfig): """ 1. 初始化学生学习记录 2. 考勤管理 3. 录成绩 4. 查看到学生所有成绩【highchart】 """ # 出勤信息(choices选项) def display_record(self, obj=None, is_header=False): if is_header: return '出勤' return obj.get_record_display() # 获取到该记录选项 list_display = ['student', 'course_record', display_record] comb_filter = [v1.FilterOption('course_record')] def checked(self, request): pk_list = request.POST.getlist("pk") models.StudyRecord.objects.filter(id__in=pk_list).update( record="checked") checked.short_desc = "已签到" def vacate(self, request): pk_list = request.POST.getlist("pk") models.StudyRecord.objects.filter(id__in=pk_list).update( record="vacate") vacate.short_desc = "请假" def late(self, request): pk_list = request.POST.getlist("pk") models.StudyRecord.objects.filter(id__in=pk_list).update(record="late") late.short_desc = "迟到" def noshow(self, request): pk_list = request.POST.getlist("pk") models.StudyRecord.objects.filter(id__in=pk_list).update( record="noshow") noshow.short_desc = "缺勤" def leave_early(self, request): pk_list = request.POST.getlist("pk") models.StudyRecord.objects.filter(id__in=pk_list).update( record="leave_early") leave_early.short_desc = "早退" show_actions = True actions = [checked, vacate, late, noshow, leave_early] show_add_btn = False # 在上课记录里面,不允许创建
class StudyRecordConfig(BasePermission, v1.StarkConfig): def display_record(self, obj=None, is_header=False): if is_header: return '出勤情况' return obj.get_record_display() list_display = ['course_record', 'student', display_record] comb_filter = [v1.FilterOption('course_record')] def action_checked(self, request): pk_list = request.POST.getlist('pk') models.StudyRecord.objects.filter(id__in=pk_list).update( record='checked') return redirect('/stark/crm/studyrecord/') action_checked.short_desc = "已签到" def action_vacate(self, request): pk_list = request.POST.getlist('pk') models.StudyRecord.objects.filter(id__in=pk_list).update( record='vacate') return redirect('/stark/crm/studyrecord/') action_vacate.short_desc = "请假" def action_late(self, request): pk_list = request.POST.getlist('pk') models.StudyRecord.objects.filter(id__in=pk_list).update(record='late') return redirect('/stark/crm/studyrecord/') action_late.short_desc = "迟到" def action_noshow(self, request): pk_list = request.POST.getlist('pk') models.StudyRecord.objects.filter(id__in=pk_list).update( record='noshow') return redirect('/stark/crm/studyrecord/') action_noshow.short_desc = "缺勤" def action_leave_early(self, request): pk_list = request.POST.getlist('pk') models.StudyRecord.objects.filter(id__in=pk_list).update( record='leave_early') return redirect('/stark/crm/studyrecord/') action_leave_early.short_desc = "早退" actions = [ action_checked, action_vacate, action_late, action_noshow, action_leave_early ] show_actions = True show_add_btn = False
class UserInfoConfig(v1.StarkConfing): """用户管理""" list_dsplay = ['name','username','email','depart'] edit_link = ['depart'] combination_filter = [ v1.FilterOption('depart',text_func_name=lambda x:str(x),val_func_name=lambda x:x.code,), ] show_search_form = True search_fields = ['name__contains']
class ClassListConfig(v1.StarkConfig): def display_teachers(self, obj=None, is_header=False): if is_header: return '任课老师' html = [] teacher_list = obj.teachers.all() for teacher in teacher_list: html.append(teacher.name) return ",".join(html) comb_filter = [v1.FilterOption('school', ), v1.FilterOption('course', )] list_display = [ 'school', 'course', 'semester', 'price', 'start_date', 'graduate_date', 'memo', display_teachers, 'tutor' ]
class UserInfoConfig(v1.StarkConfig): list_display=["name","username","email","depart"] comb_filter = [ v1.FilterOption("depart",text_func_name=lambda x:str(x),val_func_name=lambda x:x.code,) ] edit_link = ["name"] search_fields = ["name__contains","email__contains","username__contains"] show_search_form = True
class AuthorConfig(v1.StarkConfig): #自定义添加额外的url def extra_url(self): url_list = [ url(r'^xxxx/', self.fun), ] return url_list #额外添加的url,对应的函数 def fun(self): return HttpResponse("额外添加的url") #自定义查询字段 list_display = ['id', "username", "password"] #有无添加按钮的权限 # show_add_btn = True #自定义从那个字段搜索 show_query_field = True query_field = ["username__contains", "password__contains"] show_actions = True #自定义actions def multi_del(self, requset): pk_list = requset.POST.getlist('pk') self.model_class.objects.filter(pk__in=pk_list).delete() multi_del.short_desc = '批量删除' def multi_init(self, requset): pk_list = requset.POST.getlist('pk') multi_init.short_desc = '初始化' list_acions = [multi_del, multi_init] comb_filter = [ v1.FilterOption('username', ), v1.FilterOption('password', ), ]
class ClassListConfig(v1.StarkConfing): """班级管理""" def course_semester(self,obj=None,is_header=False): """课程和班级拼接""" if is_header: return '班级' return '%s(%s期)'%(obj.course.name,obj.semester,) #未完成作业班级人数 # ############## 作业3:popup增加时,是否将新增的数据显示到页面中(获取条件) ############# def num(self,obj=None,is_header=False): """班级人数""" if is_header: return '班级人数' return 80 combination_filter = [ v1.FilterOption('school',), v1.FilterOption('course',True) ] list_dsplay = ['school',course_semester,num,'start_date'] edit_link = [course_semester]
class UserInfoConfig(v1.StarkConfig): list_display = ['name','username','email','depart'] edit_link = ['name'] comb_filter = [ v1.FilterOption('depart',text_func_name=lambda x: str(x),val_func_name=lambda x: x.code,) ] search_fields = ['name__contains','email__contains'] show_search_form = True show_comb_filter = True
class ClassListConfig(v1.StarkConfig): """ 班级名称 """ list_display = ["school", "course", "semester", "start_date"] com_filter = [ v1.FilterOption("teachers", text_func_name=lambda x: str(x), val_func_name=lambda x: x.teach_classes), ] show_com_filter = True
class UserInfoConfig(v1.StarkConfig): def display_gender( self, obj=None, is_header=False): #obj=None:数据库没有字段 is_header=False:表头也没有 if is_header: #这里就需要有表头显示, 如果需要有 return '性别' #返回给一个 '描述' return obj.get_gender_display() #解决内容为None的问题,如果是一个 choices,通过obj.get_字段名_display()方法拿到中文名。 def display_depart(self, obj=None, is_header=False): #obj if is_header: #表头显示 return '部门' return obj.depart.caption #解决内容为None的问题, 通过对象跨表查询。 def display_roles(self, obj=None, is_header=False): if is_header: #表头显示 return '角色' html = [] role_list = obj.roles.all() for role in role_list: html.append(role.title) return ','.join(html) #解决内容为None的问题,因为多对多关系 # Booklist = [] # for i in range(100): # Booklist.append(models.UserInfo(name="曹操", email='*****@*****.**', gender='1',depart_id=1)) # models.UserInfo.objects.bulk_create(Booklist) list_display = [ 'id', 'name', 'email', display_gender, display_depart, display_roles ] # FilterOption('字段', 是否多选, 条件, 是否是choice)。 组合搜索的选项 #方式1:通过字典封装, 方式2: 通过函数对象封装 comb_filter = [ v1.FilterOption('gender', is_choice=True), v1.FilterOption('depart', ), v1.FilterOption('roles', True), ]
class ClassListConfig(v1.StarkConfig): def teachers_display(self, obj=None, is_header=False): if is_header: return "任教老师" user_list = obj.teachers.all() html = [] for i in user_list: html.append(i.name) return ','.join(html) def display_graduate_date(self, obj=None, is_header=False): if is_header: return "结业日期" return '' if not obj.graduate_date else obj.graduate_date def display_memo(self, obj=None, is_header=False): if is_header: return "说明" return '' if not obj.memo else obj.memo def course_semester(self, obj=None, is_header=False): if is_header: return "课程(班级)" return "%s(%s期)" % (obj.course, obj.semester) #列举这个班级的人数 def num(self, obj=None, is_header=False): if is_header: return "人数" # print(obj.student_set.all().count()) return obj.student_set.all().count() list_display = [ "school", course_semester, num, "price", "start_date", display_graduate_date, display_memo, teachers_display, "tutor" ] edit_link = ["school", "tutor"] # ############## 作业2:组合搜索(校区、课程) ############# comb_filter = [v1.FilterOption("school"), v1.FilterOption("course")] show_comb_filter = True
class UserInfoConfig(BasePermission,v1.StarkConfig): list_display = ['name','username','email','depart'] # 组合搜索 comb_filter = [ v1.FilterOption('depart',text_func_name=lambda x:str(x),val_func_name=lambda x:x.code) # 字段 只在choice,fk,m2m有用 ] # 这俩函数就是为了防止你自定义的fk的值不是主键用的 edit_link = ['name'] # 显示搜索并支持模糊搜索 show_search_form = True search_fields = ['name__contains']
class StudyRecordConfig(v1.StarkConfig): '''学生学习记录''' def display_record(self, obj=None, is_header=False): if is_header: return "出勤" return obj.get_record_display() list_display = [ "course_record", "student", display_record, ] edit_link = ["student"] comb_filter = [ v1.FilterOption("course_record") #按课程组合搜索 ] def checked(self, request): pk_list = request.POST.getlist("pk") models.StudyRecord.objects.filter(id__in=pk_list).update( record="checked") checked.short_desc = "已签到" def vacate(self, request): pk_list = request.POST.getlist("pk") models.StudyRecord.objects.filter(id__in=pk_list).update( record="vacate") vacate.short_desc = "请假" def late(self, request): pk_list = request.POST.getlist("pk") models.StudyRecord.objects.filter(id__in=pk_list).update(record="late") late.short_desc = "迟到" def noshow(self, request): pk_list = request.POST.getlist("pk") models.StudyRecord.objects.filter(id__in=pk_list).update( record="noshow") noshow.short_desc = "缺勤" def leave_early(self, request): pk_list = request.POST.getlist("pk") models.StudyRecord.objects.filter(id__in=pk_list).update( record="leave_early") leave_early.short_desc = "早退" actions = [checked, vacate, late, noshow, leave_early] show_actions = True
class ConsultRecordConfig(v1.StarkConfig): list_display = ["customer", "consultant", "date"] comb_filter = [v1.FilterOption("customer")] def changelist_view(self, request, *args, **kwargs): customer = request.GET.get("customer") current_login_user_id = 11 ct = models.Customer.objects.filter(consultant=current_login_user_id, id=customer).count() if ct: return super(ConsultRecordConfig, self).changelist_view(request, *args, **kwargs) return HttpResponse("不是你的客户")