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 的都需要换成该函数
效果图:
点击去也可以实现
day 66 crm(3) 自创组件stark界面展示数据的更多相关文章
- C#调用NPOI组件读取excel表格数据转为datatable写入word表格中并向word中插入图片/文字/书签 获得书签列表
调用word的com组件将400条数据导入word表格中耗时10分钟简直不能忍受,使用NPOI组件耗时4秒钟.但是NPOI中替换书签内容的功能不知道是不支持还是没找到. 辅助类 Excel表格数据与D ...
- 图像处理工具包ImagXpress教程:Accusoft不同组件间的图像数据传递
图像处理工具包ImagXpress的开发厂商Accusoft Pegasus旗下有多种图像处理相关的控件,但是这些图像处理控件之间的如何加传递图像数据呢?在ImagXpress 11版本之前,是需要将 ...
- vue的组件化运用(数据在两个组件互传,小问题总结)
一.vue的组件化应用 首先,知道有哪些相关的属性需要用到,再慢慢去理解,运用. 1.两个vue页面 2. slot占位符(可用可不用) 3.props内置属性 4.watch监听函数 5.impor ...
- Vue 父组件ajax异步更新数据,子组件props获取不到
转载 https://blog.csdn.net/d295968572/article/details/80810349 当父组件 axjos 获取数据,子组件使用 props 接收数据时,执行 mo ...
- EasyUI的treegrid组件动态加载数据问题的解决办法
http://www.jquerycn.cn/a_3455 —————————————————————————————————————————————————————————————————————— ...
- 关于Vue中,在方法中使用(操作)子组件获取到的数据
已知,子组件通过props获取父组件传过来的数据,而这个数据是无法在created.mounted生命周期中使用的,只能在beforeUpdated或者updated获取到: 但是如果我们要使用这个数 ...
- Vue--vue中的组件、组件绑定事件和数据、私有组件、子组件,父子组件参数互传
一.公有组件以及组件的使用和特点 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- Vue 组件中的data数据
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Vue父子组件通信(父级向子级传递数据、子级向父级传递数据、Vue父子组件存储到data数据的访问)
Vue父子组件通信(父级向子级传递数据.子级向父级传递数据.Vue父子组件存储到data数据的访问) 一.父级向子级传递数据[Prop]: ● Prop:子组件在自身标签上,使用自定义的属性来接收外界 ...
随机推荐
- 想要打动HR的心,UX设计师求职信究竟应该怎么写?
在努力准备申请一份UX设计师职位时,你最烦心和担忧的事哪一个环节?是写一份UX设计师简历?回答面试官的问题?还是在一遍遍的煎熬中等待一个面试电话?是的,这些都是不轻松的事儿,但还有一个同样糟心的事,那 ...
- struts spring 整合
错误 :Unable to load jar:file:WEB-INF/lib/struts2-spring-plugin-2.3.15.1.jar!/struts-default.xml 原因: 我 ...
- Netty学习第六节实例一步学习
NIO与传统IO对应使用的类: ServerSocketChannel相当于ServerSocket SocketChannel 相当于Socket Selector是NIO的核心类,是负责监听Ser ...
- (线段树 点更新 区间求和)lightoj1112
链接: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88230#problem/D (密码0817) Description Robin ...
- POJ1511来回最短路
POJ1511 问你从1到其它点得所有最短路之和 与 其他点到1得所有最短路之和 得总和 思路很明确就是两次最短路,翻转一次地图就好了 一开始就是两次spfa之间处理好数据得更新管理就好 vect ...
- git 在非空文件夹clone新项目
在非空目录下 git clone 项目时会提示错误信息: fatal: destination path '.' already exists and is not an empty director ...
- python的数据存储
Python存储数据 使用json.dump()和json.load() 不管专注的是什么,程序都把用户提供的信息存储在列表和字典等数据结构中.用户关闭程序时,你几乎总是要保存他们提供的信息:一种简单 ...
- [Openwrt 项目开发笔记]:Samba服务&vsFTP服务(四)
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一节中,我们讲述了如何在路由器上挂载U盘,以 ...
- 微软发布TFS 2018!
也许你还没来得及使用TFS 2017,今天,微软已经发布了TFS 2018的第一个版本(RC1). 与之前所有的候选版本一样,这是一个正式上线(微软成称为go-live)的TFS版本.如果你计划采纳T ...
- linux新定时器:timefd及相关操作函数
timerfd是Linux为用户程序提供的一个定时器接口.这个接口基于文件描述符,通过文件描述符的可读事件进行超时通知,所以能够被用于select/poll的应用场景. 一,相关操作函数 #inclu ...