stark组件之批量操作【模仿Django的admin】
一、先看下django的admin是如何实现批量操作
首先在配置类中定义一个函数
然后我们为这个函数对象设置一个属性,这个属性主要用来显示在select标签中显示的文本内容
最后把函数对象放到一个actions的列表中
下面看下具体的实现的代码
class testbook(admin.ModelAdmin): # 第一步,定义一个函数,必须要接受三个参数
def test_action(self,request,queryset):
""" :param request:
:param queryset:这个就是需要批量操作的queryset对象
:return:
"""
print(queryset) # 第二步,为这个函数对象赋值一个新的属性
test_action.short_description = "测试批量操作的函数" # 第三步,将函数对象添加到actions这个列表中
actions = [test_action]
代码已经看完,我们看下具体的实现效果
第一个方法是django自带的批量操作的函数,第二个方法就是我们自定义的批量操作的函数
至此,Django的admin的批量操作我们已经知道如何配置和使用了,下面我们来看下在我们的stark组件中是如何实现类似的批量操作的
二、下面在我们自己是如何实现类似Django的admin的批量操作
a、在某张表的配置类中定义批量操作的函数,并为这个函数设置相应的属性
def test_action(self,request,queryset):
print(queryset,) actions = [test_action]
# test_action.__name__ = "测试批量操作的函数"
test_action.short_description = "测试批量操作的函数"
b、我们在看下前端的页面,这里我们为什么要看前端的页面呢?这里其实很重要,我们的这个批量操作的按钮其实要发送2个数据给后端,一个就是我这次批量操作的函数的名称,另外一个就是我这次批量操作所选中的数据
首先我们需要把我们的函数对象渲染到select标签的option标签中
先把批量操作的函数的名称和desc放在一个列表中,这个列表的每个元素是一个字典
这个方法,我们写在showlist这个类中
def get_actions(self):
action_list = []
for i in self.config.get_new_action():
name = i.__name__
desc = i.short_description
action_list.append({"name":name,"desc":desc})
return action_list
在list_view视图函数中返回action的操作
action_str = showlist.get_actions()
return render(request,"list_view.html",{"data_list":data_list,"title_list":title_list,"page_str":page_str,"search_fields":self.search_fields,"action_str":action_str})
前端渲染select标签
<select name="func">
<option>----------</option>
{% for i in action_str %} } <option value="{{ i.name }}">{{ i.desc }}</option>
{% endfor %}
</select><input type="submit" value="批量操作" class="btn-info btn">
这里还需要对check标签需要加一个id的属性,不然我们不知道选的是哪个数据
def check(self,obj=None,header=False):
if header:
return mark_safe("<input id='head_check'type='checkbox'>")
else:
return mark_safe("<input type='checkbox' class='body_check' name='selectpk' value='{pk}'>".format(pk=obj.id))
因为django的admin默认就有一个批量删除的操作,我们也要把他这个操作搞起来
首先在父类中定义个actions的函数,这个函数就是批量操作的函数
class Starkclass(object):
list_display = ['__str__']
list_display_links = []
search_fields = []
modelformclass = None
actions = []
def __init__(self,model,site):
self.model = model
self.site = site
# self.list_display = ["__str__",] def test_action_delete(self,request,queryset):
print(queryset,"这里是父类定义的批量操作") test_action_delete.short_description = "批量删除操作"
然后我们重新写一个get_actions的函数,专门用来重组actions操作
def get_new_action(self):
new_action_list = []
new_action_list.append(Starkclass.test_action_delete)
if self.actions:
new_action_list.extend(self.actions) return new_action_list
最后在showlist类中调用我们定义个新的方法就可以了
def get_actions(self):
action_list = []
for i in self.config.get_new_action():
name = i.__name__
desc = i.short_description
action_list.append({"name":name,"desc":desc})
return action_list
stark组件之批量操作【模仿Django的admin】的更多相关文章
- stark组件之路由分发【模仿Django的admin】
一.先看下django的admin是如何进行路由分发的 1.先看下django的admin的url路径有哪些 其实很简单,假如有一个书籍表,那么每张表对应四个url,增.删.改.查 查看的url ht ...
- stark组件之搜索【模仿Django的admin】
一.先看下django的admin是如何做搜索功能的 配置一个search_fields的列表就可以实现搜索的功能 class testbook(admin.ModelAdmin): # 第一步,定义 ...
- stark组件之注册【模仿Django的admin】
一.先看下django的admin是如何实现注册功能 首先导入admin这个对象和我们的model模块 from django.contrib import admin # Register your ...
- stark组件之pop操作【模仿Django的admin】
一.先看下什么django的admin的pop到底是个什么东西 其实就是这么一个东西, a.在添加页面,在一对多和多对多的项后加了一个+号 b.点击这个加号,会弹出对应的添加 页面,在新的添加 c.添 ...
- stark组件之过滤操作【模仿Django的admin】
一.先看下django的admin是如何实现过滤操作 首先在配置类中顶一个list_filter的列表,把要过滤的字段作为元素写i进去就可以了 class testbook(admin.ModelAd ...
- stark组件之启动【模仿Django的admin】
首先需要在settings注册app INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib ...
- stark组件之分页【模仿Django的admin】
我们的stark组件用的我们的分页组件,没有重新写 下面直接看下分页的代码 class page_helper(): def __init__(self, count, current_page, p ...
- admin源码解析以及仿照admin设计stark组件
---恢复内容开始--- admin源码解析 一 启动:每个APP下的apps.py文件中. 首先执行每个APP下的admin.py 文件. def autodiscover(): autodisco ...
- 模拟Django的admin自定义stark组件
1.新建Django项目--新建app:app01和stark--在settings中配置app和数据库--在models.py中新建模型表--完成数据库迁移 2.在stark下的apps.py中: ...
随机推荐
- Directshow 采集与FFDshow 冲突
在使用Directshow 进行视频采集的时候,发现与本地安装的一个ffdshow有冲突. 见下图: 经过测试发现dshow 在设置采集媒体类型的时候,如果设置RGB32就会崩溃,如果设置RGB24就 ...
- 页面ajax自带的访问后台时,正在加载中
ajax自带访问后台时,提示正在加载中,加载完成后自动消除遮罩层,代码如下: var mask=mui.createMask();//遮罩层 //传统ajax的post请求方式 mui.ajax('h ...
- byobu copy
Copy and Paste in Scrollback mode (screen/byobu) Enter scrollback mode: F7 Move the cursor to the st ...
- Raft 为什么是更易理解的分布式一致性算法(转)
一致性问题可以算是分布式领域的一个圣殿级问题了,关于它的研究可以回溯到几十年前. 拜占庭将军问题 Leslie Lamport 在三十多年前发表的论文<拜占庭将军问题>(参考[1]). 拜 ...
- 在系统中使用Bean Validation验证参数
转自:http://www.importnew.com/18561.html 为什么要使用Bean Validation? 当我们实现某个接口时,都需要对入参数进行校验.例如下面的代码 1 2 3 ...
- TLS协议(安全传输层协议)
概况 安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性.该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake).较低的层 ...
- python实现根据文件关键字进行切分为多个文件
来源:在工作过程中,需要统计一些trace信息,也就是一些打点信息,而打点是通过关键字进行的,因此对一个很大的文件进行分析时,想把两个打点之间的内容单独拷贝出来进行分析 #!/usr/bin/env ...
- 简单实现"回车!=提交"(去除表单的回车即提交)
-------------------------------------------------------------------------------------------------- 实 ...
- python技巧 显示对象的所有属性
python技巧 显示对象的所有属性for attr in dir(ad):... print attr+":"+str(getattr(ad,attr))
- ArcGIS案例学习笔记4_2_水文分析批处理地理建模
ArcGIS案例学习笔记4_2_水文分析批处理地理建模 联系方式:谢老师,135_4855_4328,xiexiaokui#139.com 概述 计划时间:第4天下午 目的:自动化,批量化,批处理,提 ...