Django models filter筛选条件详解


Posted in Python onMarch 16, 2020

条件选取querySet的时候,filter表示=,exclude表示!=。

querySet.distinct() 去重复

__exact 精确等于 like 'aaa'
__iexact 精确等于 忽略大小写 ilike 'aaa'
__contains 包含 like '%aaa%'
__icontains 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。
__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
__in 存在于一个list范围内
__startswith 以...开头
__istartswith 以...开头 忽略大小写
__endswith 以...结尾
__iendswith 以...结尾,忽略大小写
__range 在...范围内
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
__isnull=True/False

例q1.filter(pub_date__gte=datetime.date.today())表示为时间>=now,q1.exclude(pub_date__gte=datetime.date.today())表示为<=now

“在django models中取得一个字段的distinct值”。

就是select distinct xxx from table_name ...这样的功能。

使用values会生成ValuesQuerySet(形如N个dict组成的list),猜测大数据无额外性能影响,毕竟queryset系列都是使用时才查询操作的。

xxxx.objects.values("field_name").distinct()

或者

xxxx.objects.distinct().values("field_name")

补充知识:django中的objects.get和objects.filter方法的区别

为了说明它们两者的区别定义2个models

class Student(models.Model): 
   name = models.CharField('姓名', max_length=20, default='') 
   age = models.CharField('年龄', max_length=20, default='') 
class Book(models.Model): 
   student = models.ForeignKey(Student)

一. 先说下django的obj.get():

django的get是从数据库的取得一个匹配的结果,返回一个对象,如果记录不存在的话,它会报错。

比如我数据库里有一条记录,记录的name的值是"django"的话,我用student = Student.objects.get(name='django'),

返回的是一个记录对象,你可以通过student.__dict__来查看,它返回的是一个字典的形式,{'key':valeus},key是字段的名称,而values是值的内容。

而如果我用get方法来查询一个数据库里不存在的记录,程序会报错。

比如:

student = Student.objects.get(name='python')

如果你用django的get去取得关联表的数据的话,而关键表的数据如果多于2条的话也会报错。

比如我的student表里有一个记录:

id name age
1 python 24

book表:

id student_id
1 1
2 1

我用

student = Student.objects.get(name='python') 
  book = Book.objects.get(student)

它也会报错,因为book表有2条记录和student表相匹配。

二. 再说下django filter:

django的filter方法是从数据库的取得匹配的结果,返回一个对象列表,如果记录不存在的话,它会返回[]。

比如我数据库里有一条记录,记录的name的值是Python的话,我用

student = Student.objects.filter(name='python')

它返回的student是一个对象的列表,可以看的出来student[0]和上面的get方式返回的student的结果是一样的。

以上这篇Django models filter筛选条件详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python的正则表达式re模块的常用方法
Mar 09 Python
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
Apr 09 Python
python使用arp欺骗伪造网关的方法
Apr 24 Python
Python实现登录人人网并抓取新鲜事的方法
May 11 Python
Python实现八皇后问题示例代码
Dec 09 Python
python实现蒙特卡罗方法教程
Jan 28 Python
Python常用特殊方法实例总结
Mar 22 Python
把django中admin后台界面的英文修改为中文显示的方法
Jul 26 Python
Python操作Mongodb数据库的方法小结
Sep 10 Python
Python实现代码统计工具
Sep 19 Python
PythonPC客户端自动化实现原理(pywinauto)
May 28 Python
python如何进行矩阵运算
Jun 05 Python
python递归调用中的坑:打印有值, 返回却None
Mar 16 #Python
django 前端页面如何实现显示前N条数据
Mar 16 #Python
Python迭代器Iterable判断方法解析
Mar 16 #Python
python 递归调用返回None的问题及解决方法
Mar 16 #Python
python 通过邮件控制实现远程控制电脑操作
Mar 16 #Python
django中的数据库迁移的实现
Mar 16 #Python
django之从html页面表单获取输入的数据实例
Mar 16 #Python
You might like
风味层面去分析咖啡油脂
2021/03/03 咖啡文化
常用表单验证类,有了这个,一般的验证就都齐了。
2006/12/06 PHP
php小技巧之过滤ascii控制字符
2014/05/14 PHP
laravel容器延迟加载以及auth扩展详解
2015/03/02 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
2016/03/01 PHP
php实现将数据做成json的格式给前端使用
2018/08/21 PHP
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
Extjs4 GridPanel 的几种样式使用介绍
2013/04/18 Javascript
JS通过相同的name进行表格求和代码
2013/08/18 Javascript
jquery实现input输入框实时输入触发事件代码
2014/01/28 Javascript
小米公司JavaScript面试题
2014/12/29 Javascript
jquery ajax 如何向jsp提交表单数据
2015/08/23 Javascript
Bootstrap登陆注册页面开发教程
2016/07/12 Javascript
JavaScript lodash常见用法系列小结
2016/08/24 Javascript
Vue插件写、用详解(附demo)
2017/03/20 Javascript
node.js中实现kindEditor图片上传功能的方法教程
2017/04/26 Javascript
Angularjs 实现动态添加控件功能
2017/05/25 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
Cropper.js 实现裁剪图片并上传(PC端)
2017/08/20 Javascript
JavaScript实现数字前补“0”的五种方法示例
2019/01/03 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
微信小程序通过一个json实现分享朋友圈图片
2019/09/03 Javascript
解决python脚本中error: unrecognized arguments: True错误
2020/04/20 Python
python的setattr函数实例用法
2020/12/16 Python
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
美国高端牛仔品牌:Silver Jeans
2019/12/12 全球购物
介绍一下grep命令的使用
2015/06/12 面试题
工地门卫岗位职责范本
2014/07/01 职场文书
动漫设计与制作专业推荐信
2014/07/07 职场文书
党的群众路线教育实践活动查摆问题自查报告
2014/10/10 职场文书
小学运动会报道稿
2015/07/22 职场文书
vue 实现上传组件
2021/05/31 Vue.js
nginx实现动静分离的方法示例
2021/11/07 Servers
SpringBoot整合Redis入门之缓存数据的方法
2021/11/17 Redis
MySQL聚簇索引和非聚簇索引的区别详情
2022/06/14 MySQL