class ClassListHandler(PermissionHandler, StarkHandler): def display_course(self, obj=None, is_header=None, *args, **kwargs): if is_header: return '班级' return '%s (%s)期' % ( obj.course.name, obj.semester, ) def display_course_record(self, obj=None, is_header=None, *args, **kwargs): if is_header: return '上课记录' record_url = reverse('stark:web_courserecord_list', kwargs={'class_id': obj.pk}) # 带上id 反向生成别名 return mark_safe('<a target="_blank" href="%s">上课记录</a>' % record_url) list_display = [ 'school', display_course, get_datetime_text('开班日期', 'start_date'), 'class_teacher', get_m2m_text('老师', 'tech_teacher'), display_course_record, ] # 自定义显示 model_form_class = ClassListModelForm # 自定义的样式(时间格式) # 加上组合搜索 search_group = [ Option(field='school'), Option(field='course'), ]
class UserInfoHandler(StarkHandler): # def display_gender(self, obj=None, is_header=None): # if is_header: # return "性别" # return obj.get_gender_display # # def display_classes(self, obj=None, is_header=None): # if is_header: # return "班级" # # return obj.get_classes_display # 定制页面显示的列,我这里定义几个,则页面显示几个列 list_display = [StarkHandler.display_checkbox, 'name', 'age', 'email', get_choice_text('性别', 'gender'), get_choice_text('班级', 'classes'), StarkHandler.display_edit, StarkHandler.display_del] # def get_list_display(self): # return ['name', 'age', 'email', 'depart'] has_add_btn = True order_list = ['id'] search_list = ['name__contains'] action_list = [StarkHandler.action_multi_delete, ] search_group = [ Option('gender', is_multi=True), Option('depart', db_condition={'id__gt': 0}), ]
class UserInfoHandler(StarkHandler): # 定制页面显示的列 list_display = [ StarkHandler.display_checkbox, 'name', get_choice_text('性别', 'gender'), get_choice_text('班级', 'classes'), 'age', 'email', 'depart', StarkHandler.display_edit, StarkHandler.display_del ] per_page_count = 10 has_add_btn = True # model_form_class = UserInfoModelForm order_list = ['id'] search_list = ['name__contains', 'email__contains'] action_list = [ StarkHandler.action_multi_delete, ] # def save(self, form, is_update=False): # form.instance.depart_id = 1 # form.save() search_group = [ Option('gender', is_multi=True), Option('depart', db_condition={'id__gt': 0}) # MyOption('depart', {'id__gt': 2}), # Option('gender', text_func=lambda field_object: field_object[1] + '666'), ]
class StudentHandler(PermissionHandler, ResetPasswordHandler, StarkHandler): search_group = [ Option(field='education'), Option(field='course'), ] search_list = ['stu_name__contains', 'teacher__nickname__contains'] list_display = ['stu_name', get_choice_text('性别', 'stu_gender'), 'school', get_choice_text('年级', 'education'), get_m2m_text('报名科目', 'course'), get_m2m_text('任课老师', 'teacher'), ResetPasswordHandler.display_reset_pwd ] def get_model_form_class(self, is_add, request, *args, **kwargs): if is_add: return StudentAddModelForm return StudentUpdateModelForm def save(self, request, form, is_update, *args, **kwargs): # 给学生分配教师的角色 if not is_update: form.save() role_obj = Role.objects.filter(title='学生').first() student_obj = form.instance student_obj.roles.add(role_obj) student_obj.save() form.save()
class UserInfoHandler(StarkHandler): """ 用户相关视图函数处理类 """ # 自定义页面显示列 display_list = [ StarkHandler.display_checkbox, 'name', get_choice_text('性别', 'gender'), get_choice_text('班级', 'classes'), 'age', 'email', 'depart', StarkHandler.display_edit, StarkHandler.display_del, ] # 自定义每页显示条目数量 per_page_count = 10 # 自定义页面是否显示添加按钮 has_add_btn = True # 自定义页面表单模型 # model_form_class = UserInfoModelForm # 自定义排序关键字列表 order_list = ['id'] # 自定义搜索关键词列表 search_list = ['name__contains', 'email__contains'] # 自定义页面可批量操作功能列表 action_list = [StarkHandler.action_multi_delete,] # 自定义页面组合搜索可选项组合 search_group = [ Option('gender', is_multi=True), # MyOption('depart', {'id__gt': 2}), Option('depart', db_condition={'id__gt': 0}), # Option('gender', text_func=lambda field_obj: field_obj[1] + '666'), ]
class ClassListHandler(PermissionHandler,StarkHandler): def display_course(self, obj=None, is_header=None,*args,**kwargs): if is_header: return '班级' return "%s %s期" % (obj.course.name, obj.semester) def display_course_record(self, obj=None, is_header=None, *args, **kwargs): if is_header: return '上课记录' record_url = reverse('stark:web_courserecord_list', kwargs={'class_id': obj.pk}) return mark_safe('<a target="_blank" href="%s">上课记录</a>'% record_url) list_display = [ 'school', display_course, 'price', get_datetime_text('开班日期','start_date'), 'class_teacher', get_m2m_text('任课老师','tech_teachers'), display_course_record ] model_form_class = ClassListModelForm search_group = [ Option('school'), Option('course') ]
class TeacherHandler(PermissionHandler,ResetPasswordHandler, StarkHandler): list_display = ['nickname', get_choice_text('性别', 'gender'), 'phone', 'wechat', get_m2m_text('教授科目', 'course'), 'free_time', ResetPasswordHandler.display_reset_pwd] search_list = ['nickname__contains', 'free_time__contains'] search_group = [ Option(field='gender'), Option(field='course'), ] def get_model_form_class(self, is_add, request, *args, **kwargs): if is_add: return TeacherAddModelForm return TeacherUpdateModelForm def save(self, request, form, is_update, *args, **kwargs): # 给老师分配教师的角色 if not is_update: form.save() role_obj = Role.objects.filter(title='教师').first() teacher_obj = form.instance teacher_obj.roles.add(role_obj) form.save()
class UserInfoHandler(StarkHandler): def display_reset_pwd(self, obj=None, is_header=None): if is_header: return "重置密码" parse_url = ParseUrl(request=self.request, namespace=self.site.namespace, name=self.get_url_name('reset_pwd'), pk=obj.pk) url = parse_url.memory_url() return mark_safe('<a href="%s">重置密码</a>' % url) list_display = ['nickname', 'name', get_choice_text('性别', 'gender'), 'phone', 'email', 'depart', display_reset_pwd] def get_model_form_class(self, is_add=False): """ 定制添加和编辑页面 :param is_add: :return: """ if is_add: return UserInfoAddModelForm return UserInfoChangeModelForm def reset_password(self, request, pk): """ 重置密码的视图函数 :param request: :param pk: :return: """ userinfo_object = models.UserInfo.objects.filter(id=pk).first() if not userinfo_object: return HttpResponse("用户不存在,无法进行重置!") if request.method == "GET": form = ResetPasswordForm() return render(request, 'stark/change.html', {'form': form}) form = ResetPasswordForm(data=request.POST) if form.is_valid(): userinfo_object.password = form.cleaned_data['password'] userinfo_object.save() parse_url = ParseUrl(request=self.request, namespace=self.site.namespace, name=self.get_list_url_name) url = parse_url.memory_url() return redirect(url) return render(request, 'stark/change.html', {'form': form}) def extra_urls(self): patterns = [ url(r'^reset/password/(?P<pk>\d+)/$', self.wrapper(self.reset_password), name=self.get_url_name('reset_pwd')) ] return patterns # 模糊搜索 search_list = ['nickname__contains', 'name__contains'] # 组合搜索 search_group = [ Option(field='gender'), Option(field='depart', is_multi=True), ]
class UserInfoHandler(PermissionHandler, StarkHandler): def display_reset_pwd(self, obj=None, is_header=None, *args, **kwargs): # 自定义额外字段,然后加到list_display中即可 if is_header: return '重置密码' reset_url = self.reverse_commons_url(self.get_url_name('rest_pwd'), pk=obj.pk) # 带上id 反向生成别名 return mark_safe('<a href="%s">重置密码</a>' % reset_url) list_display = [ 'nickname', get_choice_text('性别', 'gender'), 'phone', 'email', 'depart', display_reset_pwd ] # 加上模糊搜索 search_list = ['nickname__contains', 'name__contains'] # 加上组合搜索 search_group = [ Option(field='gender'), Option(field='depart'), ] def get_model_form_class(self, is_add, request, pk, *args, **kwargs): if is_add: return UserInfoAddModelForm return UserInfoEditModelForm # 扩展功能==================单独一个url处理重置密码功能================== # 自定义的视图函数,给下面调用 def reset_password(self, request, pk): """重置密码的视图函数""" user_object = models.UserInfo.objects.filter(id=pk).first() if not user_object: return HttpResponse('用户不存在无法重置密码') if request.method == 'GET': form = ResetPasswordForm return render(request, 'stark/change.html', {'form': form}) # 校验保存 form = ResetPasswordForm(data=request.POST) if form.is_valid(): # 密码更新到数据库 user_object.password = form.cleaned_data['password'] user_object.save() return redirect(self.reverse_list_url()) # 直接使用封装好的方法,会跳页面 return render(request, 'stark/change.html', {'form': form}) # 自定义增加url(重置密码)用写好的钩子方法 def extra_urls(self): patterns = [ url(r'^reset/password/(?P<pk>\d+)$', self.wrapper(self.reset_password), name=self.get_url_name('rest_pwd')) ] return patterns
class UserInfolHandler(PermissionHandler, StarkHandler): order_list = [ 'depart_id', ] search_list = ['name__contains'] search_group = [ Option(field='gender', is_multi=True), Option(field='depart'), ] def reset_user_pwd(title): from stark.utils.convert import name2url def inner(self, obj=None, is_header=None, *args, **kwargs): if is_header: return title return mark_safe("<a href='%s'>%s</a>" % (name2url( self.site.namespace, self.get_url_name('reset_pwd'), pk=obj.pk), title)) return inner list_display = [ 'name', get_choice_text('性别', 'gender'), 'phone', 'depart', reset_user_pwd('重置密码'), ] def get_model_form_class(self, is_add, request, *args, **kwargs): if is_add: return UserInfoAddModelForm else: return UserInfoEditModelForm def reset_pwd(self, request, pk, *args, **kwargs): user_obj = UserInfo.objects.filter(id=pk).first() if not user_obj: return HttpResponse('user does not exist!') form = ResetPwdModelForm() if request.method == 'GET': return render(request, 'stark/change.html', {'form': form}) form = ResetPwdModelForm(data=request.POST) if form.is_valid(): pwd = form.cleaned_data['password'] user_obj.password = pwd user_obj.save() # 在数据库保存成功后,跳转回列表页面(携带原来的参数)。 return redirect(self.reverse_list_url()) return render(request, 'stark/change.html', {'form': form}) def extra_urls(self): patterns = [ url(r'^resetpwd/(?P<pk>\w+)/$', self.wrapper(self.reset_pwd), name=self.get_url_name('reset_pwd')), ] return patterns
class StudentHandler(PermissionHandler, StarkHandler): model_form_class = StudentModelForm 'web_scorerecord_list' def display_score(self, obj=None, is_header=None, *args, **kwargs): if is_header: return '积分管理' record_url = reverse('stark:web_scorerecord_list', kwargs={'student_id': obj.pk}) return mark_safe('<a target="_blank" href="%s">%s</a>' % (record_url, obj.score)) list_display = [ 'customer', 'qq', 'mobile', 'emergency_contract', get_m2m_text('已报班级', 'class_list'), display_score, get_choice_text('状态', 'student_status') ] has_add_btn = False def get_list_display(self, request, *args, **kwargs): """ 获取页面上应该显示的列,预留的自定义扩展,例如:以后根据用户角色的不同展示不同的列 :return: """ value = [] if self.list_display: value.extend(self.list_display) value.append(type(self).display_edit) return value def get_urls(self): patterns = [ url(r'^list/$', self.wrapper(self.changelist_view), name=self.get_list_url_name), # url(r'^add/$', self.wrapper(self.add_view), name=self.get_add_url_name), url(r'^change/(?P<pk>\d+)/$', self.wrapper(self.change_view), name=self.get_change_url_name), # url(r'^delete/(?P<pk>\d+)/$', self.wrapper(self.delete_view), name=self.get_delete_url_name), ] patterns.extend(self.extra_urls()) return patterns search_list = ['customer__name', 'qq', 'mobile'] search_group = [ Option('class_list', text_func=lambda x: '%s-%s' % (x.school.title, str(x))), Option('student_status') ]
class UserInfoHandler(PermissionHandler, StarkHandler): def display_reset_pwd(self, obj=None, is_header=None, *args, **kwargs): if is_header: return '重置密码' reset_url = self.reverse_commons_url(self.get_url_name('reset_pwd'), pk=obj.pk) return mark_safe("<a href='%s'>重置密码</a>" % reset_url) list_display = [ 'nickname', get_choice_text('性别', 'gender'), 'phone', 'email', 'depart', display_reset_pwd ] search_list = ['nickname__contains', 'name__contains'] search_group = [ Option(field='gender'), Option(field='depart'), ] def get_model_form_class(self, is_add, request, pk, *args, **kwargs): if is_add: return UserInfoAddModelForm return UserInfoChangeModelForm def reset_password(self, request, pk): """ 重置密码的视图函数 :param request: :param pk: :return: """ userinfo_object = models.UserInfo.objects.filter(id=pk).first() if not userinfo_object: return HttpResponse('用户不存在,无法进行密码重置!') if request.method == 'GET': form = ResetPasswordForm() return render(request, 'stark/change.html', {'form': form}) form = ResetPasswordForm(data=request.POST) if form.is_valid(): userinfo_object.password = form.cleaned_data['password'] userinfo_object.save() return redirect(self.reverse_list_url()) return render(request, 'stark/change.html', {'form': form}) def extra_urls(self): patterns = [ url(r'^reset/password/(?P<pk>\d+)/$', self.wrapper(self.reset_password), name=self.get_url_name('reset_pwd')), ] return patterns
class CheckPaymentRecordHandler(PermissionHandler, StarkHandler): search_group = [Option('confirm_status'), Option('consultant')] order_list = ['confirm_status'] list_display = [ StarkHandler.display_checkbox, 'consultant', 'customer', 'paid_fee', get_choice_text('类型', 'pay_type'), get_choice_text('状态', 'confirm_status'), 'apply_date' ] def get_list_display(self, request, *args, **kwargs): return self.list_display has_add_btn = False def get_urls(self): patterns = [ re_path(r'^list/$', self.wrapper(self.changelist_view), name=self.get_list_url_name), ] return patterns def action_multi_check(self, request, *args, **kwargs): pk_list = request.POST.getlist('pk') for pk in pk_list: payrecord_obj = self.model_class.objects.filter( id=pk, confirm_status=1).first() if not payrecord_obj: continue payrecord_obj.confirm_status = 2 payrecord_obj.customer.status = 1 payrecord_obj.save() payrecord_obj.customer.save() action_multi_check.text = "批量通过审核" def action_multi_cancle(self, request, *args, **kwargs): pk_list = request.POST.getlist('pk') for pk in pk_list: payrecord_obj = self.model_class.objects.filter( id=pk, confirm_status=1).first() if not payrecord_obj: continue payrecord_obj.confirm_status = 3 payrecord_obj.save() action_multi_cancle.text = "批量驳回" action_list = [action_multi_check, action_multi_cancle]
class ClassListHandler(StarkHandler): def display_course(self, obj=None, is_header=None): if is_header: return '班级' return "%s %s期" % (obj.course.name, obj.semester) list_display = [ 'school', display_course, 'price', get_datetime_text('开班日期', 'start_date'), 'class_teacher', get_m2m_text('任课老师', 'tech_teachers') ] model_form_class = ClassListModelForm search_group = [Option('school'), Option('course')]
class UserInfoHandler(StarkHandler): def display_reset_pwd(self, obj=None, is_header=None, *args, **kwargs): if is_header: return "重置密码" reset_url = self.reverse_commons_url(self.get_url_name('reset_pwd'), pk=obj.pk) return mark_safe( '<a class="btn btn-small btn-info" href="%s">重置密码</a>' % reset_url) list_display = [ 'name', 'nickname', 'email', 'depart', get_choice_text('状态', 'status'), display_reset_pwd ] def get_model_form_class(self, is_add, request, pk, *args, **kwargs): """ 定制添加和编辑页面 :param is_add: :param request: :param pk: :param args: :param kwargs: :return: """ if is_add: return UserInfoAddModelForm return UserInfoChangeModelForm def reset_password(self, request, pk): """ 重置密码 :param request: :param pk: 重置密码的 用户ID :return: """ userinfo_object = models.UserInfo.objects.filter(id=pk).first() if not userinfo_object: return HttpResponse("用户不存在,无法进行重置!") if request.method == "GET": form = ResetPasswordForm() return render(request, 'stark/change.html', {'form': form}) form = ResetPasswordForm(data=request.POST) if form.is_valid(): userinfo_object.password = form.cleaned_data['password'] userinfo_object.save() return redirect(self.reverse_list_url()) return render(request, 'stark/change.html', {'form': form}) def extra_urls(self): patterns = [ url(r'^reset/password/(?P<pk>\d+)/$', self.wrapper(self.reset_password), name=self.get_url_name('reset_pwd')) ] return patterns search_list = ['name__contains', 'nickname__contains', 'email_contains'] search_group = [Option(field='depart')]
class ClassesHandler(PermissionHandler, StarkHandler): def display_classes(self, obj, is_header, *args, **kwargs): if is_header: return '班级' return str(obj) def display_course_record(self, obj, is_header, *args, **kwargs): if is_header: return '上课记录' class_course_record_url = name2url(self.site.namespace, 'academy_courserecord_list', classes_id=obj.pk) return mark_safe("<a target='_blank' href='%s'>上课记录</a>" % (class_course_record_url)) def display_homework(self, obj, is_header, *args, **kwargs): if is_header: return '班级作业' new_url = name2url(self.site.namespace, 'academy_homework_list', classes_id=obj.pk) return mark_safe("<a target='_blank' href='%s'>班级作业</a>" % new_url) def get_queryset(self, request, *args, **kwargs): user_id = request.session['user_info']['id'] id_queryset = UserInfo.objects.filter(id=user_id).first().roles.all().values_list('id') user_role_id_list = [item[0] for item in id_queryset] if 10 in user_role_id_list: #该用户是老师 return UserInfo.objects.filter(id=user_id).first().classes.all() return super().get_queryset(request, *args, **kwargs) model_form_class = ClassesModelForm list_display = ['school', display_classes, get_m2m_text('老师', 'teacher'), 'price', get_datetime_text('开班日期', 'start_date'), display_course_record, display_homework] search_group = [Option('course')]
class UserInfoHandler(StarkHandler): # 定制页面显示的列 list_display = [ StarkHandler.display_checkbox, 'id', 'name', get_choice_text('性别', 'gender'), get_choice_text('班级', 'classes'), 'age', 'email', 'depart', StarkHandler.display_edit, StarkHandler.display_del ] per_page_count = 10 # 每页显示数据个数 has_add_btn = True # 是否显示添加按钮 order_list = ['id'] # 数据排序方式 # 姓名中或邮箱中含有关键字 不加__contains就是精确查找 search_list = ['name__contains', 'email__contains'] action_list = [StarkHandler.action_multi_delete] # 批量删除 # model_form_class = UserInfoModelForm # 自定制 添加/编辑 页面显示的字段 # def save(self, form, is_update=False): # form.instance.depart_id = 1 # form.save() search_group = [ Option('gender', is_multi=True), MyOption('depart', db_condition={'id__gt': 2}), # db_condition:ORM的筛选条件 # Option('gender', text_func=lambda field_object: '666' ) ]
class ClassListHandler(StarkHandler): """ 班级模型视图函数处理类 """ # 页面显示课程信息 def display_course(self, obj=None, is_header=None): """ 页面显示课程信息 :param obj: :param is_header: :return: """ if is_header: return '班级' return '%s %s期' % (obj.course.name, obj.semester) # 页面显示上课记录 def display_course_record(self, obj=None, is_header=None, *args, **kwargs): """ 页面显示上课记录 :param obj: :param is_header: :param args: :param kwargs: """ if is_header: return '上课记录' record_url = reverse('stark:web-courserecord-list', kwargs={'class_id': obj.pk}) return mark_safe('<a target="_blank" href="%s">查看上课记录</a>' % \ record_url) display_list = [ 'school', display_course, 'price', get_datetime_text('开班日期', 'start_date'), 'class_teacher', get_m2m_text('任课老师', 'tech_teachers'), display_course_record, ] model_form_class = ClassListModelForm search_group = [ Option('school'), Option('course'), ]
class StudentHandler(StarkHandler): """ 学员相关视图函数处理类 """ # 页面显示积分记录 def display_score_record(self, obj=None, is_header=None, *args, **kwargs): """ 页面显示积分记录 :param obj: :param is_header: :parma args: :param kwargs: :return: """ if is_header: return '积分管理' score_url = reverse('stark:web-scorerecord-list', kwargs={'student_id': obj.pk}) return mark_safe('<a target="_blank" href="%s">%s</a>' % (score_url, obj.score)) def get_add_btn(self, request, *args, **kwargs): return None def get_display_list(self): value = [] if self.display_list: value.extend(self.display_list) value.append(type(self).display_edit) return value def get_urls(self): patterns = [ url(r'^list/$', self.wrapper(self.list_view), name=self.get_list_url_name), # url(r'^add/$', self.wrapper(self.add_view), # name=self.get_add_url_name), url(r'^edit/(?P<pk>\d+)/$', self.wrapper(self.edit_view), name=self.get_edit_url_name), # url(r'^del/(?P<pk>\d+)/$', self.wrapper(self.del_view), # name=self.get_del_url_name), ] patterns.extend(self.extra_urls()) return patterns display_list = [ 'customer', 'qq', 'mobile', 'emergency_contract', get_m2m_text('已报班级', 'class_list'), display_score_record, get_choice_text('状态', 'student_status') ] model_form_class = StudentModelForm search_list = ['customer__name', 'qq', 'mobile'] search_group = [ Option('class_list', text_func=lambda x: '%s-%s' % (x.school.title, str(x))) ]
class StudentHandler(PermissionHandler, StarkHandler): model_form_class = StudentModelForm def display_score(self, obj=None, is_header=None, *args, **kwargs): """新加一列""" if is_header: return '积分管理' # 反向取url record_url = reverse('stark:web_scorerecord_list', kwargs={'student_id': obj.pk}) return mark_safe('<a target="_blank" href="%s">%s</a>' % (record_url, obj.score)) list_display = [ 'customer', 'qq', 'mobile', 'emergency_contract', get_m2m_text('已报名班级', 'class_list'), display_score, get_choice_text('状态', 'student_status') ] # 自定义显示 def get_add_btn(self, request, *args, **kwargs): """重构隐藏, 添加按钮""" return None def get_list_display(self, request, *args, **kwargs): """重构:只需要修改按钮""" value = [] if self.list_display: value.extend(self.list_display) value.append(type(self).display_edit) return value def get_urls(self): """重构url ,值需要列表功能""" patterns = [ url(r'^list/$', self.wrapper(self.changelist_view), name=self.get_list_url_name), url(r'^change/(?P<pk>\d+)/$', self.wrapper(self.change_view), name=self.get_change_url_name), ] patterns.extend(self.extra_urls()) return patterns # 模糊搜索 search_list = [ 'customer__name', 'qq', 'mobile', ] # 组合搜索 search_group = [ Option('class_list', text_func=lambda x: '%s-%s' % (x.school.title, str(x))) # 利用text_func添加一个lambda函数处理显示字符串 ]
class CourseRecordHandler(PermissionHandler, StarkHandler): # 老师查看或添加自己某个学生所有的课堂反馈 search_group = [Option('status')] model_form_class = CourseRecordModelForm list_display = [ 'student', 'course', 'record_num', get_datetime_text('上课时间', 'date'), get_choice_text('状态', 'status') ] def display_edit(self, obj=None, is_header=None, *args, **kwargs): """ 自定义页面显示的列(表头和内容) :param obj: :param is_header: :return: """ if is_header: return "编辑" return mark_safe('<a href="%s">编辑</a>' % self.reverse_change_url( pk=obj.pk, student_id=kwargs['student_id'])) def get_urls(self): patterns = [ re_path(r'^list/(?P<student_id>\d+)$', self.wrapper(self.changelist_view), name=self.get_list_url_name), re_path(r'^add/(?P<student_id>\d+)$', self.wrapper(self.add_view), name=self.get_add_url_name), re_path(r'^change/(?P<student_id>\d+)/(?P<pk>\d+)/$', self.wrapper(self.change_view), name=self.get_change_url_name), ] return patterns def display_edit_del(self, obj=None, is_header=None, *args, **kwargs): if is_header: return '操作' tpl = '<a href="%s">反馈详细信息</a>' % (self.reverse_change_url( pk=obj.pk, student_id=kwargs['student_id'])) return mark_safe(tpl) def get_queryset(self, request, *args, **kwargs): return self.model_class.objects.filter(student_id=kwargs['student_id']) def save(self, request, form, is_update, *args, **kwargs): if form.instance.status == settings.RECORD_CHECKED: return HttpResponse("已审核过的课堂反馈不可以被修改!") if is_update: form.instance.status = settings.RECORD_UNCHECKED form.instance.student_id = kwargs['student_id'] form.instance.teacher_id = request.session['user_id'] form.save()
class ProjectHandler(StarkHandler): search_list = ['title__contains', 'sever__contains', 'status__contains'] # 定制页面显示的列 list_display = [ StarkHandler.display_checkbox, # 批量删除操作选择框 'title', # 字段 get_choice_text('状态', 'status'), # 选择项字段 'server', StarkHandler.display_edit, # 添加编辑按钮 StarkHandler.display_del ] # 添加删除按钮 action_list = [ StarkHandler.action_multi_delete, ] search_group = [ Option('status', is_multi=True), Option('server', db_condition={'id__gt': 0}), ]
class UserInfoHandler(StarkHandler): # 定制页面显示的列 list_display = [ StarkHandler.display_checkbox, # 批量删除操作选择框 'name', # 字段 get_choice_text('性别', 'gender'), # 选择项字段 'age', 'email', 'depart', StarkHandler.display_edit, # 添加编辑按钮 StarkHandler.display_del ] # 添加删除按钮 per_page_count = 10 # 自定制每页显示的条数 has_add_btn = True # 自定制是否显示添加按钮 # model_form_class = UserInfoModelForm # 如果需要添加数据库没有的字段,可用UserInfoModelForm类自定制 order_list = ['-age'] # 设置列表页按哪个字段排序排序 # 姓名中含有关键字或邮箱中含有关键字 search_list = ['name__contains', 'email__contains'] action_list = [ StarkHandler.action_multi_delete, ] # def save(self, form, is_update=False): # """ # 用于自定义可编辑字段时,某些存在于数据库却没有在编辑页显示的字段,在这里进行默认赋值 # :param form: # :param is_update: # :return: # """ # form.instance.depart_id = 1 # form.save() # 按照表中choice字段和外键进行快速筛选 search_group = [ Option('gender', is_multi=True), # choice字段 Option('depart', db_condition={'id__gt': 0}), # 外键 # MyOption('depart', {'id__gt': 2}), # Option('gender', text_func=lambda field_object: field_object[1] + '666'), ]
class StudentHandler(StarkHandler): model_form_class = StudentModelForm list_display = [ 'customer', 'qq', 'mobile', 'emergency_contract', get_m2m_text('已报班级', 'class_list'), get_choice_text('状态', 'student_status') ] has_add_btn = False def get_list_display(self): """ 获取页面上应该显示的列,预留的自定义扩展,例如:以后根据用户角色的不同展示不同的列 :return: """ value = [] if self.list_display: value.extend(self.list_display) value.append(type(self).display_edit) return value def get_urls(self): patterns = [ url(r'^list/$', self.wrapper(self.changelist_view), name=self.get_list_url_name), # url(r'^add/$', self.wrapper(self.add_view), name=self.get_add_url_name), url(r'^change/(?P<pk>\d+)/$', self.wrapper(self.change_view), name=self.get_change_url_name), # url(r'^delete/(?P<pk>\d+)/$', self.wrapper(self.delete_view), name=self.get_delete_url_name), ] patterns.extend(self.extra_urls()) return patterns search_list = ['customer__name', 'qq', 'mobile'] search_group = [ Option('class_list', text_func=lambda x: '%s-%s' % (x.school.title, str(x))), Option('student_status') ]
class UserInfoHandler(StarkHandler): def display_gender(self, obj=None, is_header=None): if is_header: return "性别" else: return obj.get_gender_display() list_display = [ StarkHandler.display_checkbox, "name", get_choice_text("性别", "gender"), get_choice_text("年级", "classes"), display_gender, "age", "email", "depart", StarkHandler.display_edit, StarkHandler.display_del ] # per_page_count = 20 per_page_count = 10 # has_add_btn = False # model_form_class = UserInfoModelForm order_list = ['id'] # 排序,sql中的order # 姓名中含有关键字或者邮箱中含有关键字 search_list = ["name__contains", "email__contains"] # 模糊匹配 # search_list = ["name", "email"] # 精确匹配 # search_list = ["name__contains"] action_list = [ StarkHandler.action_multi_delete, ] # def multi_init(self, request, *args, **kwargs): # multi_init.text = "批量处理" # action_list = [multi_delete, multi_init] # def save(self, form, is_update=False): # form.instance.depart_id = 1 # form.save() search_group = [ Option("gender", is_multi=True), Option("depart", db_condition={'id__gt': 2}), # Option("depart", {'id__gt': 1}), # Option("gender", text_func=lambda field_object: field_object[1]+'666'), ]
class GoodsHandler(StarkHandler): list_display = [ 'id', 'name', 'gtype', 'unit', 'nickname', 'price', 'date', 'meno' ] search_group = [ Option('gtype'), ] search_list = [ 'name__contains', 'nickname__contains', 'meno__contains', ]
class UserInfoHandler(StarkHandler): # per_page_num = 2 # 定制页面的列 list_display = [ StarkHandler.display_checkbox, 'name', get_choice_text('性别', 'gender'), get_choice_text('班级', 'classes'), # 'gender','classes', 'age', 'email', 'depart', StarkHandler.display_edit, StarkHandler.display_del ] has_add_btn = True # 在stark/service/v1 下面定义了一个model_form_class的None,就是为了可以自定义自己的ModelForm model_form_class = UserInfoModelForm # order_list = ['name'] # 姓名中含有关键字或邮箱中含有关键字 如果没有 __contains 就算精确查找 search_list = ['name__contains', 'email__contains'] # 批量操作的选项 。 如果没有值,那么页面就不显示 action_list = [ StarkHandler.action_multi_delete, StarkHandler.action_depart_multi_init ] # 具有什么批量操作的功能 # 组合搜索 # search_group = ['gender','depart'] search_group = { Option('gender'), Option('depart', is_multi=True, db_condition={'id__gt': 0}), Option('classes', is_multi=True, db_condition={'id__gt': 0}), # MyOption('depart',{'id__gt': 2}), }
class UserInfoHandler(StarkHandler): label_name = [ 'realname', get_choice_text('性别', 'gender'), 'phone', 'email', 'depart', StarkHandler.display_reset_pwd ] search_list = ['realname__contains'] search_group = [ Option('gender', is_multi=False), Option('depart', is_multi=False) ] def get_model_form_class(self, request, is_add=False, *args, **kwargs): if is_add: return UserInfoAddModelForm return UserInfoChangeModelForm def extra_urls(self): patterns = [ url(r'reset/pwd/(?P<id>\d+)/$', self.wrapper(self.reset_pwd), name=self.get_reset_pwd_url_name), ] return patterns
class StudentHandler(PermissionHandle, StarkHandler): def display_score(self, obj=None, is_header=None, *args, **kwargs): if is_header: return '积分管理' score_url = reverse('stark:web_scorerecord_list', kwargs={'student_id': obj.pk}) return mark_safe('<a href="%s">%s</a>' % (score_url, obj.score)) def get_urls(self): patterns = [ url(r'^list/$', self.wrapper(self.list), name=self.get_list_url_name), url(r'^change/(?P<id>\d+)/$', self.wrapper(self.change), name=self.get_change_url_name), ] patterns.extend(self.extra_urls()) return patterns def get_label_name(self, request, *args, **kwargs): ''' 为以后的扩展预留,根据不同的情况显示不同的内容(列) :return: ''' value = [] value.extend(self.label_name) if self.label_name: value.append(type(self).display_change) return value has_add_btn = False label_name = [ 'customer', 'qq', 'mobile', 'emergency_contract', get_mtom_text('班级', 'class_list'), get_choice_text('状态', 'student_status'), display_score ] search_list = ['customer__name', 'qq', 'mobile'] search_group = [ Option('class_list', text_func=lambda x: '%s-%s' % (x.school.title, str(x))) ] model_form_class = StudentModelForm
class UserinfoHandler(PermissionHandler,StarkHandler): def display_reset_pwd(self, obj=None, is_header=None): if is_header: return '重置密码' return mark_safe('<a href="%s">重置密码</a>' % self.reverse_reset_pwd_url(pk=obj.pk)) search_group = [ Option(field='gender'), ] search_list = ['nickname__contains', 'name__contains'] list_display = ['nickname', get_choice_text('性别', 'gender'), 'phone', 'email', 'depart', display_reset_pwd] def reset_pwd(self, request, pk): if request.method == 'GET': return render(request, 'stark/delete.html', {'msg': '重置密码', 'cancel': self.reverse_list_url()}) user_obj = models.UserInfo.objects.filter(id=pk).first() if not user_obj: return HttpResponse('用户不存在') user_obj.password = '******' user_obj.save() return redirect(self.reverse_list_url()) def reverse_reset_pwd_url(self, *args, **kwargs): return self.reverse_commons_url(self.get_reset_pwd_url_name, *args, **kwargs) @property def get_reset_pwd_url_name(self): return self.get_url_name('reset_pwd') def extra_urls(self): patterns = [url(r'^reset/password/(?P<pk>\d+)/$', self.wrapper(self.reset_pwd), name=self.get_reset_pwd_url_name) ] return patterns def get_model_form_class(self, is_add, request, *args, **kwargs): if is_add: return UserInfoAddModelForm return UserInfoUpdateModelForm