? list_view
1.处理表格(默认是显示表结构的所有字段)
1 list_display = self.get_list_display() 2 # 4.1处理表头 3 header_list = [] 4 if list_display: 5 for multi_key in list_display: 6 if isinstance(multi_key,FunctionType): #判断 传入值是否为函数 7 verbose_name = multi_key(self,obj=None,is_header=True) 8 else: 9 verbose_name = self.model_class._meta.get_field(multi_key).verbose_name 10 header_list.append(verbose_name) 11 else: 12 header_list.append(self.model_class._meta.model_name) 13 14 # 4.2处理表的内容 15 data_list = queryset[pager.start:pager.end] 16 17 body_list = [] 18 for row in data_list: #row 是UserInfo object (1) 19 row_list = [] 20 21 if list_display: 22 for multi_key in list_display: 23 if isinstance(multi_key,FunctionType): 24 row_list.append(multi_key(self,row,is_header=False,*args,**kwargs)) 25 else: 26 row_list.append(getattr(row,multi_key)) #获取UserInfo object (1)的属性 27 else: 28 row_list.append(row) 29 30 body_list.append(row_list)
为了能够扩展以后业务的功能(推出新的业务,高级用户可能要显示多的列或者新的功能),我们可以针对某张表进行自定义修改定制。只需在自己的Handler子类重写此方法
这是StarkHandler类的方法
1 list_display = [] 2 def get_list_display(self): 3 """ 4 获取页面上应该显示的列,预留自定义扩展 5 :return: 6 """ 7 field_list = [] 8 field_list.extend(self.list_display) 9 return field_list
在上面方法的架构基础下,实现以往对表〔编辑〕〔删除〕的基本功能
如图
1 def display_edit(self,obj=None,is_header=None): 2 """ 3 生成<编辑>a标签 4 :param obj: 5 :param is_header: 6 :return: 7 """ 8 if is_header: 9 return "编辑操作" 10 change_url = self.reverse_change_url(pk=obj.pk) 11 return mark_safe(‘<a href="%s">编辑</a>‘%change_url) 12 13 def display_delete(self,obj=None,is_header=None): 14 """ 15 生成<删除>a标签 16 :param obj: 17 :param is_header: 18 :return: 19 """ 20 if is_header: 21 return "删除操作" 22 delete_url = self.reverse_delete_url(pk=obj.pk) 23 return mark_safe(‘<a href="%s">删除</a>‘% delete_url)
示例:
1 #models.py下的Major类: 2 #class Major(models.Model): 3 # title = models.CharField(verbose_name=‘专业‘,max_length=32) 4 # 5 # def __str__(self): 6 # return self.title 7 8 #该model类view函数下,继承StarkHanler,list_display[字段+方法]: 9 from stark.service.v1 import StarkHandler 10 11 class MajorHandler(StarkHandler): 12 list_display = [‘title‘,StarkHandler.display_edit,StarkHandler.display_delete]
原文:https://www.cnblogs.com/steven2020/p/10708283.html