博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
stark组件开发之列表页面定制列
阅读量:5223 次
发布时间:2019-06-14

本文共 3287 字,大约阅读时间需要 10 分钟。

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

看一看我的  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。 默认展示对象就行了。

 

转载于:https://www.cnblogs.com/chengege/p/10735768.html

你可能感兴趣的文章
分享适合个人站长的5类型网站
查看>>
类别的三个作用
查看>>
【SICP练习】85 练习2.57
查看>>
runC爆严重安全漏洞,主机可被攻击!使用容器的快打补丁
查看>>
Maximum Product Subarray
查看>>
solr相关配置翻译
查看>>
通过beego快速创建一个Restful风格API项目及API文档自动化(转)
查看>>
解决DataSnap支持的Tcp长连接数受限的两种方法
查看>>
Synchronous/Asynchronous:任务的同步异步,以及asynchronous callback异步回调
查看>>
ASP.NET MVC5 高级编程-学习日记-第二章 控制器
查看>>
Hibernate中inverse="true"的理解
查看>>
高级滤波
查看>>
使用arcpy添加grb2数据到镶嵌数据集中
查看>>
[转载] MySQL的四种事务隔离级别
查看>>
QT文件读写
查看>>
C语言小项目-火车票订票系统
查看>>
15.210控制台故障分析(解决问题的思路)
查看>>
BS调用本地应用程序的步骤
查看>>
常用到的多种锁(随时可能修改)
查看>>
用UL标签+CSS实现的柱状图
查看>>