先看一张页面展示的效果图:
看一看我的 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})