• day 66 crm(3) 自创组件stark界面展示数据


    前情提要: 

      接着上一节的.stark自创组件的展示效果编写

       展示数据

      一:按照默认自带数据展示

        即无一对一,一对多

        1:先获取queryset对象

      

          2:获取当前操作模型表对象数据

        注意:list_display 为元祖,这样如果默认样式的时候会反射第一个索引所在的位置即

      "__str__"

        2>1视图层

         2>2数据展示结果

     

         2>3前端:

     

     

     

     

    二:按照一对多展示

    即一对多publish 展示

    1:展示模型关系

    2:在自定配置类中增加一对多内容,正向按照字段

     3:前端效果

     三:多对多显示

    知识补充:

    展示模型类对象

    使用名字访问一个model的实例

    模型名._meta.get_field("publish") 

     

    展示模型类对象名字

     

    展示模型类对象app名字

     

     

    展示默认名称

    如果没有设置,则展示本身的属性名

     

     

     

    如果展示了则显示设置的名字,注意此处设置了verbose 名字

     

     

     

     1:前端反射默认方法

    如果没有参数则不需要加括号

    默认的配置__str__()方法,前端可以不用加括号直接显示

    2:判断如果是多对多怎么处理内容

    普通属性从self.list._display中拿取的是字符串

    一对多,多对多的拿取出来的是对象

    导入包 判断拿出的对象是否为manytomanyfiled类型

     

     设置当为多对多的时候.抛出错误,多对多的时候需要,自定制列

     

     

     3:判断字段是否为chiose字段

     

     

     

     4:由于没有__str__ 属性

     

    field_obj = self.model._meta.get_field(field_or_func) #获取模型对象 
    这句话,获取的是对象的字段属性,,但是其中没有没有

     

     

     

    这段可能是错误的!!! 

    try..except 和raise 冲突

    这么写不对

     

     5: 自定制列展示多对多字段

    知识点:

    callable  判断是否为可调用的(函数和类可以调用)

    直接把自定制函数扔到dis_play中

    stites中放获取返回值,然后加入到列表中传到前端

     

     

     

    这里的self 是类函数调用的方式.,因为原来类中需要穿参,现在增加一个参数而已,什么都行.但是最好是self

     

     

     6:处理多对多内容

    6>1: 在callable 内容中传入obj对象,方便操作数据

    6>2:在自定制配置类中,通过obj 获取对应的作者信息

     

     

     四:设置表头内容  

    1:如果是普通属性,非定制列 ,即只有 __str__

     

    传出的是表明的大写 

    2:如果是普通属性,定制列  ,接收其他非属性多对多属性

    3:如果是多对多,定制列,接收多对多函数

     

     4 注册表书写:

      

    五:设置编辑,删除,以及选择按钮增加到默认配置类

    1:

      设置展示自定制函数在stites中

    注意导入safe包

     

    该包,可以是后台传入的标签内容不会被转化,直接成为前端代码

    from django.utils.safestring import mark_safe

     其中删除和编辑的代码需要用到反向解析.

    先导入包:

    定义类名和表明

     

    视图层设置反向解析name

     

    反向解析代码

            # 反向解析当前访问表的增删改查URL
    
        def get_list_url(self):
            # 反向解析当前表的删除的URL
            list_url = reverse("%s_%s_list" % (self.app_label, self.model_name))
            return list_url
    
        def get_add_url(self, obj):
            # 反向解析当前表的删除的URL
            add_url = reverse("%s_%s_delete" % (self.app_label, self.model_name))
            return add_url
    
        def get_delete_url(self, obj):
            # 反向解析当前表的删除的URL
            delete_url = reverse("%s_%s_delete" % (self.app_label, self.model_name), args=(obj.pk,))
            return delete_url
    
        def get_change_url(self, obj):
            # 反向解析当前表的删除的URL
            change_url = reverse("%s_%s_change" % (self.app_label, self.model_name), args=(obj.pk,))
            return change_url

    分析:方向解析名字为app名加表明  利用的是无名分组,注意无名分组为元祖传参

     def show_checkbox(self,obj=None,header=False):
            #展示选择列
            if header:
                return mark_safe("<input type='checkbox'>")
            return mark_safe("<input type='checkbox'>")
        def show_delbtn(self,obj=None,header=False):
            if header:
                return "删除"
    
            return mark_safe("<a href='%s'>删除</a>" % self.get_delete_url(obj))
        def show_editbtn(self,obj=None,header=False):
            if header:
                return "编辑"
            return mark_safe("<a href='%s'>编辑</a>" % self.get_change_url(obj))

     

    属性说明:

    self 为当前操作的模型配置类

    obj=None 让默认对象的值为None,即当代用抬头的时候不用传值

    header=False  让默认的header 为False ,使调用数据的时候不用传值,且 不反回抬头,只返回数据

     

     获取表头中,是header =true 这样可以获取表头数据内容

     

    2: 如果想在默认配置类中,直接展示

     则需要在定义一个函数,把内容加入到自定制的list_display中

     

     2 >1 :注意,现在所有调用list_display 的都需要换成该函数

     

     

     

    效果图:

    点击去也可以实现

  • 相关阅读:
    【Linux】项目部署
    【架构师之路】【MQ】消息队列
    【数据库】【Python】mysql
    【算法】【Python】找出字符串中重复出现的字符 并求出重复次数 且根据重复次数从大到小排列
    【Python】排序 按照list中的字典的某key排序
    Kettle Post请求webservice
    python+pytest+allure接口自动化测试框架
    Python+unittest+requests+htmlTestRunner+excel完整的接口自动化框架
    python实现栈的基本操作
    展示博客园顶部的随笔、文章、评论、阅读量统计数据
  • 原文地址:https://www.cnblogs.com/baili-luoyun/p/10712071.html
Copyright © 2020-2023  润新知