zoukankan      html  css  js  c++  java
  • stark组件开发之列表页面预留钩子方法。 可根据用户的不同,显示不同的列

    要实现,这个方法。子类中 list_diplay 这个列表, 就不能够写死。
    他应该是 可以根据。用户的不同,返回不同的值。

    所以 就需要一个函数, 可以进行判断当前用户是谁。 并且往这个列表中添加,他可以查看的东西。
    所以,我在 StartHandler 基类中。 定义了一个方法,就是用于返回。这个list_display 列表。

    class StartHandler(object):
        list_display = []
    
        def __init__(self, model_class, prve):
            self.model_class = model_class
            self.prev = prve
    
        def get_list_display(self):
            '''
            获取不同用户登录时, 页面应该显示的列. 使用时在子类中,重写该方法,指定list_display 要包含哪些值
            :return:
            '''
            value = []
            value.extend(self.list_display)
    
            return value
    
        def check_list_view(self, request):
            '''
            列表查看页面
            :param request:
            :return:
            '''
            list_display = self.get_list_display()
            # 页面要显示的列 self.list_display  示例:['name', 'age', 'depart']
    
            # 1. 制作表头, 就是每张表中,每个字段写的 verbose_name.。 如何获取到这个值呢?
            # self.model_class._meta.get_field('name').verbose_name
            header_list = []  # 表头
            if list_display:
                for name in 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 list_display:
                    for key in 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})
    StartHandler
    def get_list_display(self):  这段代码的作用,就只是。获取到,当前这个对象的  list_display 列表然后。 返回一个列表。

    然后,列表视图函数中, 要使用这个  list_display   就掉用这个方法。 就可以了!

    完成了,这个就很容易了。  我只需要在 继承这个 基类的  子类中。 再次去重写这个  def get_list_display(self):    并且返回值是一个包含模型表中,字段的列表就可以了!

    在这里,每个 Handler 子类。 就可以分别进行。判断当前用户是谁。 并且它拥有哪些查看的权限。从而让他查看哪些内容。

    逻辑代码写在这里,就没问题了!

    比如,先来个简单的:

    class UserInfoHandler(StartHandler):
    
        def get_list_display(self):
            '''预留的自定义扩展。调用父类方法,返回一个包含 模型表字段的 列表。 并且可以根据用户的不同,显示不同的列'''
            return ["depart"]

    只返回一个  ["depart"]  

    看页面的展示:

     只有  部门 能够查看了!! 

  • 相关阅读:
    Windows 7 32位上硬盘安装linux[ubuntu13.04] 双系统
    【笨嘴拙舌WINDOWS】BMP图片浏览器
    【笨嘴拙舌WINDOWS】设备无关图(*.bmp)
    【笨嘴拙舌WINDOWS】GDI对象之位图
    Android-Java-对象在内存中的简单关系图
    Android-Java-类与对象的关系
    Android-Java-面向对象与面向过程举例
    Android-Java-面向对象与面向过程的简单理解
    Android-ANR异常
    Android-Genymotion Unable to load VirtualBox engine
  • 原文地址:https://www.cnblogs.com/chengege/p/10736441.html
Copyright © 2011-2022 走看看