浅谈Django的Q查询以及AngularJS的Datatables分页插件
使用Q查询,首先要导入Q模块:
from django.db.models import Q
可以组合使用&,|操作符用于多个Q的对象,产生一个新的Q对象,Q对象也可以用~操作符放在前面表示否定,如下例所示:
if search:
keywords_list = search.split(' ')
query_list = [Q(status__icontains=get_success_fail_status(keyword)) if get_success_fail_keyword_status(keyword) else
Q(username__icontains=keyword) |
Q(groupid__icontains=keyword) |
Q(status_active_vs__icontains=keyword) |
Q(orders_created_time__icontains=keyword) |
Q(status_bind__icontains=keyword) |
Q(status_active_Bind__icontains=keyword) |
Q(env__icontains=keyword) for keyword in keywords_list]
q = Q()
for query in query_list:
q.add(query, Q.AND) #把query添加到之前定义的最外层的Q对象中,查询条件是 '和'
Q(username__icontains=keyword) | Q(groupid__icontains=keyword) 表示查询 username或者 groupid
再谈谈AngularJS的Datatables分页插件:
Datatables的主要功能是分页、即时搜索和排序,虽然django自带的模板引擎也有分页功能(Paginator),但无论从功能上还是美观上,Datatables都更好。


DTOptionsBuilder.newOptions()
.withOption('ajax', {
url: "/api/other/get_http_https_apply/",
type: 'GET'
})
.withDataProp('data')
.withOption('serverSide', true)
.withPaginationType('full_numbers')
.withOption('createdRow', createdRow)
.withOption('order', [
[0, 'desc']
]);
'serverSide', true 表示开启服务器模式,
ajax表示数据的来源(包括处理分页,排序,过滤),
full_numbers表示所有的数据,
http_https.dtColumns = [
DTColumnBuilder.newColumn('id').withTitle('ID'),
DTColumnBuilder.newColumn('username').withTitle('申请人'),
DTColumnBuilder.newColumn('env').withTitle('环境'),
DTColumnBuilder.newColumn('groupid').withTitle('group_id'),
DTColumnBuilder.newColumn('status_active_vs').withTitle('激活vs').renderWith(apply_status),
DTColumnBuilder.newColumn('status_bind').withTitle('绑定').renderWith(apply_status),
DTColumnBuilder.newColumn('status_active_Bind').withTitle('激活绑定').renderWith(apply_status),
DTColumnBuilder.newColumn('status').withTitle('最终结果').renderWith(apply_status),
DTColumnBuilder.newColumn('orders_created_time').withTitle('时间')
];
//判断是否是admin用户,如果是admin,则在http_https.dtColumns这个数组中增加(push)一个元素
if (http_https.js_admin) {
http_https.dtColumns.push(DTColumnBuilder.newColumn(null).renderWith(actionsHtml).withTitle('Actions'))
}
DTColumnBuilder.newColumn表示新增表格的列
.renderWith对数据进行渲染 这里apply_status是我自己写的一个函数,用于转换json中True和False对应的html中的“成功、失败”
部分详情代码请见我的github:https://github.com/a342058040/Django_AngularJS_Datatables.git
浅谈Django的Q查询以及AngularJS的Datatables分页插件的更多相关文章
- 浅谈Angular的 $q, defer, promise
浅谈Angular的 $q, defer, promise 时间 2016-01-13 00:28:00 博客园-原创精华区 原文 http://www.cnblogs.com/big-snow/ ...
- 浅谈Django的中间件与Python的装饰器
浅谈Django的中间件 与Python的装饰器 一.原理 1.装饰器是Python的一种语法应用,利用闭包的原理去更改一个函数的功能,即让一个函数执行之前先到另外一个函数中执行其他需求语句,在执行该 ...
- Django中Q查询及Q()对象
问题 一般我们在Django程序中查询数据库操作都是在QuerySet里进行进行,例如下面代码: >>> q1 = Entry.objects.filter(headline__st ...
- Django orm Q查询补充
Q的简单用法 from django.db.models import Q q = Q() q.children.append(("username", "lyj&quo ...
- 浅谈Excel开发:十一 针对64位Excel的插件的开发和部署
自Office 2010版本开始有了32位和64位之分,对Excel来说,32位的Excel和64位的Excel在性能上的主要区别是64位的Excel能够处理2G及2G以上的大数据集. 随着64位操作 ...
- 浅谈 django Models中的跨表
跨表操作在数据库操作非常常用,虽然其会降低读取数据的性能,但是它能节约数据在硬盘中的占用,优化数据表的结构和各自之间的关系. 在sql中,一般跨表需要用到 join 关键字 select * from ...
- 浅谈Django的生命周期和CBF和FBC
Django的生命周期和CBF和FBC 对于所有的web框架来说本质就是一个socket服务端,浏览器是socket客户端,客户端和服务端通信,字符串(Http协议):请求头和请求体 响应头+响应体 ...
- 浅谈Redis之慢查询日志
首先我们需要知道redis的慢查询日志有什么用?日常在使用redis的时候为什么要用慢查询日志? 第一个问题: 慢查询日志是为了记录执行时间超过给定时长的redis命令请求 第二个问题: 让使用者更好 ...
- 企业应用:浅谈 “数据权限” 和 查询 API 设计
背景 多数企业应用都需要对数据权限进行控制,如:某个用户只能看到某个范围的数据(数据行).某个用户只能看到某几列数据(数据列).本文以数据行级别的权限控制为范例,谈谈如何设计权限模型和查询 API. ...
随机推荐
- ecos的app机制
底层->支持层->业务 底层base 数据库访问 service管理 app管理 kvstore存储 kvcache缓存 支持层 pam登录验证 dbeav数据库扩展功能 site前台 d ...
- hibernate--session的CRUD方法, delete, load,get,update,saveorupdate, clear, flush
删除方法: 新建的对象立马被删除 @Test public void testDelete() { Teacher t = new Teacher(); t.setName("t1" ...
- dedecms标签使用
关键描述调用标签: <meta name="keywords" content="{dede:field name='keywords'/}">&l ...
- c++中vector使用
不多说,先看代码: #include <IOSTREAM> #include <VECTOR> using namespace std; int main() { cout&l ...
- Docker学习小计
1.自动下载并且创建容器 Now verify that the installation has worked by downloading the ubuntu image and launchi ...
- UVa 369 - Combinations
题目大意:给两个数n, m,求C(n, m).用java直接写就好了. import java.io.*; import java.util.*; import java.math.*; class ...
- 输入计算表达式,将他们存在string【】中
#include<stdio.h>#include<string>#include<string.h>#include<stdlib.h>#includ ...
- 数据可视化-OmniGraffle软件
OmniGraffle Pro for mac破解版是一款运行在MAC OS平台上的思维导图流程图制作软件,通过思维导图软件(OmniGraffle Pro MAC)帮你组织头脑中思考的信息,组织头脑 ...
- python3中bytes与string的互相转换
首先来设置一个原始的字符串, Python 3.2.3 (default, Apr 11 2012, 07:15:24) [MSC v.1500 32 bit (Intel)] on win32 Ty ...
- 把windows的bat用好了,也很不错
taskkill /f /t /im nginx.exe cp2nginx xcopy /e /i /y “D:\workspace\workspace1\aff\WebContent” “D:\ng ...