DjangoORM查询、分页、ckeditor
查询数据
Django的批量查询(查询所有,或者条件查询)返回的是queryset对象。
Queryset对象是一个惰性对象,在不执行
1、排序
2、循环
3、截取
操作的情况下,不会遍历序列的内容。
返回QuerySet对象的方法有:
all()、filter()、exelude()、order_by()、reverse()、distinct()
只要返回的是queryset对象就可以调用其他的方法,直到返回的是对象本身
查询 方法
all(): 查询所有结果 filter(**kwargs): 它包含了与所给筛选条件相匹配的对象,多个条件and关系 get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,
如果符合筛选条件的对象超过一个或者没有都会抛出错误。 exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象 order_by(*field): 对查询结果排序 用法:order_by('-price') DESC 降序 reverse(): 对查询结果反向排序 count(): 返回数据库中匹配查询(QuerySet)的对象数量。 first(): 返回第一条记录 last(): 返回最后一条记录 exists(): 如果QuerySet包含数据,就返回True,否则返回False 相当于limit 1(用途查询这个表中是否有值) values(*field): 用法:Book.objects.all.values('title','price') 返回值是<queryset[{'title':'aa','pirce':12},{}] values_list(*field): 用法:Book.objects.all.values_list('title','price') 返回值是<queryset[('aa',12),('bb',33)]
distinct(): 从返回结果中剔除重复纪录 用法:Book.objects.all.values('title','price').distinct()
错误用法 Book.objects.all.distinct() 因为id不相同,其他相同,无法去重
模糊查询常用的操作
python manage.py shell 基于当前项目的交互式命令行
__lt 小于
__lte 小于等于
__gt 大于
__gte 大于等于

__in 在某个范围,返回文章id为5,8的数据

__contains包含个范围,类似于like
__exact 精确等于 like 'aaa'
__iexact 精确等于 忽略大小写 ilike 'aaa'
__contains 包含 like '%aaa%'
__icontains 包含,忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。

__isnull 判空
Student.objects.filter(name__isnull=True) // 查询用户名为空的学生
Student.objects.filter(name__isnull=False) // 查询用户名不为空的学生
__startswith 以…开头
__istartswith 以…开头 忽略大小写
__endswith 以…结尾
__iendswith 以…结尾,忽略大小写
__range 在…范围内 models.Tb1.objects.filter(id__range=[1, 3]) # id范围是1到3的,等价于SQL的bettwen and
[:]分页,索引默认从0开始,不包括结束索引,返回前1-4条数据(从0开始)

查询文章对应的作者
article.article_author

查询作者对应的文章
atype.article_set.all()

查询文章对应的类型
article.article_type.all()

查询类型对应的文章
atype.article_set.all()
总结:正向查询 表中有外键字段,直接对象.关联外键字段.字段(一对一,一对多)
一对一获取的是一个对象,多对多需要调用all()获取到所有
反向操作表中没有外键字段,获取关联数据,只用对象.关联表的类名(小写)_set.all()
增加数据
普通数据
1. ArticleType.objects.create(label='蓬莱鬼话',description='12333')
2.atype = ArticleType()
atype.label = '蓬莱鬼话'
atype.description= '一篇提神醒脑'
atype.save()
保存时间
import datetime
article.public_time = datetime.datetime.now()
添加外键
添加的数据是外键映射的一条数据,不是id字段
三张表关系如下:
作者
文章类型
文章:和作者一对一关系,和类型多对多关系
添加一对一关系:
article = Article() article.title='骆驼祥子' ... article.article_author = Author.objects.get(id=1)
添加多对多关系
article.article_type.add(ArticleType.objects.get(id=1))

删除数据

删除多条

修改数据
1、Update

2、使用实例修改

分页
django 自带分页功能
pagtor = Paginator(User.objects.all(),per_page=3) # 构造分页器对象
pagtor.count:所有页面对象总数,即统计object_list中item数目。
pagtor.num_pages:页面总数。
pagiator.page_range:页面范围,从1开始,例如[1,2,3,4]
page = Paginator(User.objects.all(),per_page=3).page(1) # 获取第一页
Page.has_next () 如果有下一页,则返回 True
Page.has_previous () 如果有上一页,返回 True
Page.has_other_pages () 如果有上一页或下一页,返回 True
Page.next_page_number () 返回下一页的页码。如果下一页不存在,抛出 InvlidPage 异常
Page.previous_page_number () 返回上一页的页码。如果上一页不存在,抛出InvalidPage异常
Page.start_index () 返回当前页上的第一个对象,相对于分页列表的所有对象的序号,从1开始。比如,将
五个对象的列表分为每页两个对象,第二页的 start_index() 会返回 3
Page.end_index () 返回当前页上的最后一个对象,相对于分页列表的所有对象的序号,从1开始。 比如,
将五个对象的列表分为每页两个对象,第二页的 end_index() 会返回 4
Page.object_list 当前页上所有对象的列表
Page.number 当前页的序号,从1开始
Page.paginator 相关的 Paginator 对象
from django.core.paginator import Paginator def newList(request,types,p):
"""
:param request:
:param types: 文章类型
:param p: 页码
:return:
"""
p = int(p)
page_size = 6
articles = ArticleType.objects.get(label=types).article_set.order_by("-public_time") article_list = Paginator(articles,page_size) # 进行分页
page_article = article_list.page(p) # 返回对应页码
page_range = set_page(article_list.page_range,p)
# article_list.num_pages 总页码数,article_list.page_range 下标从 1 开始的页数范围迭代器,article_list.count表示所有页面的对象总数 return render(request,"newlist.html",locals())
html 使用
<div class="pagelist">页次:{{ p }}/{{ article_list.num_pages}} 每页{{ page_size }} 总数{{ article_list.count }}
<a href="/newList/{{ types }}/1/">首页</a>
{%if p > 1 %}
<a href="/newList/{{ types }}/{{ p|add:-1 }}/" >上一页</a>
{% endif %}
{% for p in page_range %}
<a href="/newList/{{ types }}/{{ p }}">{{ p }}</a>
{% endfor %}
{%if p < article_list.num_pages %}
<a href="/newList/{{ types }}/{{ p|add:1 }}/">下一页</a>
{% endif %}
<a href="/newList/{{ types }}/{{ article_list.num_pages }}/">尾页</a></div>
</div>
后台使用ckeditor
1.安装ckeditor ,pip install django-ckeditor
2.settings.py配置
CKEDITOR_UPLOAD_PATH = 'uploads/' # 上传路径
CKEDITOR_IMAGE_BACKEND = 'pillow' # 上传图片使用的模块

3. 替换模型中字段
from ckeditor.fields import RichTextField description = RichTextField()
content = RichTextField()
4.访问查看效果
DjangoORM查询、分页、ckeditor的更多相关文章
- mysql数据库管理工具sqlyog在首选项里可以设置默认查询分页条数和字体,改写关键字大小写
sqlyog设置一直习惯用sqlyog来管理mysql数据库,但有三个地方用得不是很爽:1.默认查询条数只有1000条经常需要勾选掉重新查询.2.自动替换关键字大小写,有时候字段名为关键字的搞成大写的 ...
- RDIFramework.NET 中多表关联查询分页实例
RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案.该框架以SOA范式作为 ...
- 查询分页的几种Sql写法
查询分页的几种Sql写法 摘自:http://www.cnblogs.com/zcttxs/archive/2012/04/01/2429151.html 1.创建测试环境,(插入100万条数据大概耗 ...
- MyBatis关联查询分页
背景:单表好说,假如是MySQL的话,直接limit就行了. 对于多对多或者一对多的情况,假如分页的对象不是所有结果集,而是对一边分页,那么可以采用子查询分页,再与另外一张表关联查询,比如: sele ...
- Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询
HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了 ...
- lucene 查询+分页+排序
lucene 查询+分页+排序 1.定义一个工厂类 LuceneFactory 1 import java.io.IOException; 2 3 import org.apache.lucene.a ...
- 动态多条件查询分页以及排序(一)--MVC与Entity Framework版url分页版
一.前言 多条件查询分页以及排序 每个系统里都会有这个的代码 做好这块 可以大大提高开发效率 所以博主分享下自己的6个版本的 多条件查询分页以及排序 二.目前状况 不论是ado.net 还是EF ...
- Mybatis oracle多表联合查询分页数据重复的问题
Mybatis oracle多表联合查询分页数据重复的问题 多表联合查询分页获取数据时出现一个诡异的现象:数据总条数正确,但有些记录多了,有些记录却又少了甚至没了.针对这个问题找了好久,最后发现是由于 ...
- Tp框架查询分页显示与全部查询出来显示运行时间快慢有区别吗?
8:08:01 青春阳光 2017/4/7 8:08:01 大神在吗? Tp框架查询分页显示与全部查询出来显示运行时间快慢有区别吗? 青春阳光 2017/4/7 8:08:20 还有个问题,上传到pu ...
- Linq高级查询,分页查询及查询分页结合
一.高级查询与分页查询 1.以...开头 StartsWith Repeater1.DataSource=con.Users.Where(r=>r.Nickname.StartsWith( ...
随机推荐
- HZOI20190816模拟23 mine/water/gcd
A:mine 只是一个简单的dp....是博主太蒻了... 设f[i][j],表示到第i位,状态是j的方案数,其中$j\in[0,5]$ j==0表示填0,j==1表示填1,且i-1位是雷; j==2 ...
- javascript 数组的方法(一)
栈方法(后进先出) ArrayObj.push():就是向数组末尾添加新的元素,返回的是数组新的长度. ArrayObj.pop():就是向数组中删除数组最后一个元素并且返回该元素.如果数组为空就返回 ...
- js 类数组转化数组
一.常见类数组集合 (1).arguements function fn(){ var arr = [].slice.call(arguements,0); } (2).HTMLCollection ...
- 深入浅出 Java Concurrency (30): 线程池 part 3 Executor 生命周期[转]
我们知道线程是有多种执行状态的,同样管理线程的线程池也有多种状态.JVM会在所有线程(非后台daemon线程)全部终止后才退出,为了节省资源和有效释放资源关闭一个线程池就显得很重要.有时候无法正确的关 ...
- opencv-Mat数据类型及位数总结
转自:http://blog.sina.com.cn/s/blog_662c7859010105za.html 在OpenCV里面,许多数据结构为了达到內存使用的最优化,通常都会用它最小上限的空间来分 ...
- Java-MyBatis-MyBatis3-XML映射文件:insert, update 和 delete
ylbtech-Java-MyBatis-MyBatis3-XML映射文件:insert, update 和 delete 1.返回顶部 1. insert, update 和 delete 数据变更 ...
- iOS开发CATransform3D.h属性详解和方法使用
1.CATransform3D简介 layer有个属性transform,是CATransform3D类型.可以使其在三维界面作平移.缩放和旋转单独或组合动画! CATransform3D结构体: / ...
- 自定义UICollectionViewLayout(适用于多个section)
一.自定义layout主要方法 重写系统的- (void)prepareLayout 方法: 其实就是计算每个cell的frame和其它相关属性. 二.在网上看了好多自定义的layout 但是没有多 ...
- OpenCASCADE圆与平面求交
OpenCASCADE圆与平面求交 eryar@163.com 在 解析几何求交之圆与二次曲面中分析了OpenCASCADE提供的类IntAna_IntConicQuad可以用来计算圆与二次曲面之间的 ...
- 【CF285E】Positions in Permutations
题目 刷水题涨信心 显然这是个广义容斥,我们现在算一下至少有\(i\)个完美数的方案数就好了 这\(1000\)的数据范围显然在暗示\(n^2\)的dp 我们注意到这个条件大概就是\(P_i=i-1\ ...
