• 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。 默认展示对象就行了。
  • 相关阅读:
    SQL Server ->> Natively Compiled Stored Procedures(本地编译存储过程)
    Linux ->> <user_name> not in the sudoers file. This incident will be reported.
    Linux ->> Ping命令
    Linux ->> UBuntu 14.04 LTE下主机名称和IP地址解析
    Linux ->> UBuntu ->> Could not get lock /var/lib/dpkg/lock
    Linux ->> scp命令复制对端机器上的文件/文件夹
    Linux ->> UBuntu 14.04 LTE下安装Hadoop 1.2.1(伪分布模式)
    Linux ->> UBuntu 14.04 LTE下设置静态IP地址
    .Net ->> iTextSharp工具读取PDF文本内容
    oracle case用法
  • 原文地址:https://www.cnblogs.com/chengege/p/10735768.html
Copyright © 2020-2023  润新知