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求解最大公约数的实现方法
Aug 20 Python
python的paramiko模块实现远程控制和传输示例
Oct 13 Python
详解appium+python 启动一个app步骤
Dec 20 Python
Python操作mysql数据库实现增删查改功能的方法
Jan 15 Python
78行Python代码实现现微信撤回消息功能
Jul 26 Python
Python自动化运维之Ansible定义主机与组规则操作详解
Jun 13 Python
详解Python中pyautogui库的最全使用方法
Apr 01 Python
浅析Python面向对象编程
Jul 10 Python
python 利用opencv实现图像网络传输
Nov 12 Python
Numpy中np.max的用法及np.maximum区别
Nov 27 Python
在pycharm创建scrapy项目的实现步骤
Dec 01 Python
matlab xlabel位置的设置方式
May 21 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
PHP获取短链接跳转后的真实地址和响应头信息的方法
2014/07/25 PHP
PHP实现返回JSON和XML的类分享
2015/01/28 PHP
8个PHP数组面试题
2015/06/23 PHP
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
js设置控件的隐藏与显示的两种方法
2014/08/21 Javascript
JavaScript设计模式之装饰者模式介绍
2014/12/28 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
javascript格式化json显示实例分析
2015/04/21 Javascript
js ajaxfileupload.js上传报错的解决方法
2016/05/05 Javascript
Bootstrap编写一个同时适用于PC、平板、手机的登陆页面
2016/06/30 Javascript
jQuery如何防止Ajax重复提交
2016/10/14 Javascript
Vue 2中ref属性的使用方法及注意事项
2017/06/12 Javascript
js实现数组和对象的深浅拷贝
2017/09/30 Javascript
vue.js,ajax渲染页面的实例
2018/02/11 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
vue简单练习 桌面时钟的实现代码实例
2019/09/19 Javascript
[08:06]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant 选手采访
2021/03/11 DOTA
python模拟登陆阿里妈妈生成商品推广链接
2014/04/03 Python
python类和函数中使用静态变量的方法
2015/05/09 Python
十条建议帮你提高Python编程效率
2016/02/16 Python
使用Python的package机制如何简化utils包设计详解
2017/12/11 Python
Python2/3中urllib库的一些常见用法
2017/12/19 Python
Python字符串格式化%s%d%f详解
2018/02/02 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
2019/07/12 Python
Notino意大利:购买香水和化妆品
2018/11/14 全球购物
HomeAway英国:全球领先的度假租赁在线市场
2020/02/03 全球购物
会计自我鉴定
2014/02/04 职场文书
售后服务经理岗位职责范本
2014/02/22 职场文书
三年级班级文化建设方案
2014/05/04 职场文书
党员批评与自我批评思想汇报(集锦)
2014/09/14 职场文书
乡镇干部个人对照检查材料(群众路线)
2014/09/26 职场文书
2014年初级职称工作总结
2014/12/08 职场文书
2015年维修工作总结
2015/04/25 职场文书
高中班主任寄语
2019/06/21 职场文书
Redis实现订单自动过期功能的示例代码
2021/05/08 Redis
Python字符串格式化方式
2022/04/07 Python