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( ... 
随机推荐
- 【JZOJ3236】矮人排队
			description 在七山七海之外的一个小村庄,白雪公主与N个矮人住在一起,所有时间都花在吃和玩League of Legend游戏.白雪公主决心终结这样的生活,所以为他们举办了体育课. 在每节课 ... 
- RSA算法的基本原理
			记得在我上初一的时候做过这么一道数学竞赛题,就是求7的222次方的个位数字.当时教材上介绍的解题方法是将222分解成4*55+2,然后算出7的2次方个个位数字即为要算的数值.当时年幼无知的我根本不了解 ... 
- sqlite3加密
			最近因为工作原因,需要使用sqlite数据库.sqlite数据库小并且使用方便,感觉挺不错的.但有一个不足就是没有对数据库进行加密,不过好的是sqlite预留有加密的接口,我们可以直接调用即可.我也是 ... 
- Chrome快捷键,  Mac 下 Chrome 浏览器 快捷键
			Chrome窗口和标签页快捷键:Ctrl+N 打开新窗口 Ctrl+T 打开新标签页 Ctrl+Shift+N 在隐身模式下打开新窗口 Ctrl+O,然后选择文件 在谷歌浏览器中打开计算机上的文件 按 ... 
- Bitcoin 的基本原理
			昨天读到了 Bitcoin 的中文介绍,觉得非常有意思.不过上面这篇文章解释的非常不靠谱,我花了一晚上去Bitcoin的官方网站 仔细研究了一下,总算理解了其原理.感觉非常有启发,尤其是对虚拟货币的流 ... 
- elasticsearch配置优化
			调整ES内存分配有多种方式,建议调整 elasticsearch 中的设置(还可以直接修改bin下的启动脚本). # Directory where the Elasticsearch binary ... 
- Maven实战08_仓库
			何为Maven仓库 在Maven世界中.任何一个依赖.插件或者项目构建的输出,都可以称之为构件.例如依赖log4j-1.2.15.jar是一个构件,差价maven-compile-plugin-2.0 ... 
- Ubuntu18上安装Go和GoLand
			第一步骤:安装Go 方式一: 使用 sudo apt-get install golang命令安装 ubuntu软件库里当前golang版本为1.10,(golang最新版为1.11),可满足要求. ... 
- JZOJ5894【NOIP2018模拟10.5】同余方程
			题目 Description 
- node.js 安装步骤
			1.打开链接(http://nodejs.cn/download/) 2.下载自己所需的安装包(32位 or 64位.哪个系统) 3.双击直接安装(成功如下图) 4.点击 Node.js comman ... 
 
			
		