zoukankan      html  css  js  c++  java
  • stark组件开发之列表页面定制列

    先看一张页面展示的效果图:

    看一看我的  model 表!是什么样子:

    看一看数据库是什么样子:

    看 页面展示图,有表头。 有数据。
    模型表中,每一个字段, 都指定了 verbose_name。

    如何解决?

    每个子类中,自定义  list_display  用于指定, 需要展示。 表中的哪个字段(这个名字和表中的字段需要,对应上。 不能错。)
    class
    UserInfoHandler(StartHandler): list_display = ["name", "age", "depart"] # 定义表头显示字段 site.register(models.UserInfo, UserInfoHandler)
    基类中 指定一个变量。 list_display = []  该变量。在子类指定之后。  对象调用时,就会是子类中的 list_display = [......]
    class
    StartHandler(object): list_display = [] def __init__(self, model_class, prve): self.model_class = model_class self.prev = prve def check_list_view(self, request): ''' 列表查看页面 :param request: :return: ''' # 页面要显示的列 self.list_display 示例:['name', 'age', 'depart'] # 1. 制作表头, 就是每张表中,每个字段写的 verbose_name.。 如何获取到这个值呢? # self.model_class._meta.get_field('name').verbose_name header_list = [] # 表头 for name in self.list_display: verbose_name = self.model_class._meta.get_field(name).verbose_name # 获取到 verbose_name 放入列表中 header_list.append(verbose_name) # 2. 处理 从数据库 取到的数据 # 用户访问的表 self.model_class data_list = self.model_class.objects.all() body_list = [] # 整体的body for row in data_list: row_list = [] # 每一行要展示的内容 for key in self.list_display: row_list.append(getattr(row, key)) # row是个model类对象,使用getattr 获取值 body_list.append(row_list) # 将每一行,添加到 body_list 中。 return render(request, "changelist.html", {"header_list": header_list, "data_list": data_list, "body_list": body_list})

     row_list.append(getattr(row, key))  一定要使用 getattr方法。 不能使用 句点符。

    比如 row_list.append(row.key)  . 这样做。在去找外键的时候。 是会报错的。

    stark组件开发之列表页面默认显示列:
    上面的代码中,基类中的  list_display=[]  所以, 用户就必须要,自己写一个字类,并指定display列表。 才可以使用此功能。
    所以需要一个默认展示的功能:

    class StartHandler(object):
        list_display = []
    
        def __init__(self, model_class, prve):
            self.model_class = model_class
            self.prev = prve
    
        def check_list_view(self, request):
            '''
            列表查看页面
            :param request:
            :return:
            '''
            # 页面要显示的列 self.list_display  示例:['name', 'age', 'depart']
    
            # 1. 制作表头, 就是每张表中,每个字段写的 verbose_name.。 如何获取到这个值呢?
            # self.model_class._meta.get_field('name').verbose_name
            header_list = []  # 表头
            if self.list_display:
                for name in self.list_display:
                    verbose_name = self.model_class._meta.get_field(name).verbose_name
                    header_list.append(verbose_name)
            else:
                header_list.append(self.model_class._meta.model_name)
    
            # 2. 处理 从数据库 取到的数据   # 用户访问的表  self.model_class
            data_list = self.model_class.objects.all()
    
            body_list = []
            for row in data_list:
                row_list = []
                if self.list_display:
                    for key in self.list_display:
                        row_list.append(getattr(row, key))
                else:
                    row_list.append(row)
                body_list.append(row_list)
    
            return render(request, "changelist.html",
                          {"header_list": header_list, "data_list": data_list,
                           "body_list": body_list})
    默认展示功能,如果用户自己没有,指定 list_display。 默认展示对象就行了。
  • 相关阅读:
    最好的云备份选项
    不要让你的云备份策略退居次位
    了解区域类型
    Managing WMI security
    创建、导入、导出、复制以及粘贴 WMI 筛选器
    Gpfixup
    centos 7 安装MySQL 5.7.23
    centos 7 配置 mysql 5.7 主从复制
    oracle DG搭建
    undo表空间丢失、损坏
  • 原文地址:https://www.cnblogs.com/chengege/p/10735768.html
Copyright © 2011-2022 走看看