前情提要: 

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

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

   展示数据

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

    即无一对一,一对多

    1:先获取queryset对象

  day 66 crm(3) 自创组件stark界面展示数据 随笔 第1张

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

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

  "__str__"

    2>1视图层

day 66 crm(3) 自创组件stark界面展示数据 随笔 第2张

     2>2数据展示结果

day 66 crm(3) 自创组件stark界面展示数据 随笔 第3张

 

     2>3前端:

day 66 crm(3) 自创组件stark界面展示数据 随笔 第4张

 

 

day 66 crm(3) 自创组件stark界面展示数据 随笔 第5张

 

 

二:按照一对多展示

即一对多publish 展示

1:展示模型关系

day 66 crm(3) 自创组件stark界面展示数据 随笔 第6张

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

day 66 crm(3) 自创组件stark界面展示数据 随笔 第7张

 3:前端效果

day 66 crm(3) 自创组件stark界面展示数据 随笔 第8张

 三:多对多显示

知识补充:

展示模型类对象

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

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

day 66 crm(3) 自创组件stark界面展示数据 随笔 第9张

 

展示模型类对象名字

day 66 crm(3) 自创组件stark界面展示数据 随笔 第10张

 

展示模型类对象app名字

day 66 crm(3) 自创组件stark界面展示数据 随笔 第11张

 

 

展示默认名称

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

day 66 crm(3) 自创组件stark界面展示数据 随笔 第12张

 

 

 

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

day 66 crm(3) 自创组件stark界面展示数据 随笔 第13张

 

day 66 crm(3) 自创组件stark界面展示数据 随笔 第14张

 

 

 1:前端反射默认方法

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

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

day 66 crm(3) 自创组件stark界面展示数据 随笔 第15张

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

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

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

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

 day 66 crm(3) 自创组件stark界面展示数据 随笔 第16张

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

 day 66 crm(3) 自创组件stark界面展示数据 随笔 第17张

 

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

 

 day 66 crm(3) 自创组件stark界面展示数据 随笔 第18张

day 66 crm(3) 自创组件stark界面展示数据 随笔 第19张

 

 4:由于没有__str__ 属性

 

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

 

day 66 crm(3) 自创组件stark界面展示数据 随笔 第20张

 

 

这段可能是错误的!!! 

try..except 和raise 冲突

这么写不对

day 66 crm(3) 自创组件stark界面展示数据 随笔 第21张

 

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

知识点:

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

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

day 66 crm(3) 自创组件stark界面展示数据 随笔 第22张

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

 

 

 

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

 day 66 crm(3) 自创组件stark界面展示数据 随笔 第23张

 

 6:处理多对多内容

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

day 66 crm(3) 自创组件stark界面展示数据 随笔 第24张

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

day 66 crm(3) 自创组件stark界面展示数据 随笔 第25张

 

 

 四:设置表头内容  

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

day 66 crm(3) 自创组件stark界面展示数据 随笔 第26张

 

传出的是表明的大写 

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

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

day 66 crm(3) 自创组件stark界面展示数据 随笔 第27张

 

 4 注册表书写:

  day 66 crm(3) 自创组件stark界面展示数据 随笔 第28张

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

1:

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

注意导入safe包

day 66 crm(3) 自创组件stark界面展示数据 随笔 第29张

 

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

from django.utils.safestring import mark_safe

day 66 crm(3) 自创组件stark界面展示数据 随笔 第30张

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

先导入包:

day 66 crm(3) 自创组件stark界面展示数据 随笔 第31张

定义类名和表明

day 66 crm(3) 自创组件stark界面展示数据 随笔 第32张

 

视图层设置反向解析name

day 66 crm(3) 自创组件stark界面展示数据 随笔 第33张

 

反向解析代码

 # 反向解析当前访问表的增删改查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))

 

属性说明:

day 66 crm(3) 自创组件stark界面展示数据 随笔 第34张

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

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

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

day 66 crm(3) 自创组件stark界面展示数据 随笔 第35张

 

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

 

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

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

day 66 crm(3) 自创组件stark界面展示数据 随笔 第36张

 

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

day 66 crm(3) 自创组件stark界面展示数据 随笔 第37张

 

day 66 crm(3) 自创组件stark界面展示数据 随笔 第38张

 

 

效果图:

day 66 crm(3) 自创组件stark界面展示数据 随笔 第39张

day 66 crm(3) 自创组件stark界面展示数据 随笔 第40张

点击去也可以实现

day 66 crm(3) 自创组件stark界面展示数据 随笔 第41张

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄