查询集:表示从数据库中获取的对象集合
查询集可以有多个过滤器
在管理器上调用过滤方法
查询集经过过滤器筛选后返回一个新的查询集,所以可以写链式调用
惰性执行 -- 创建查询集不会带来任何数据库的访问直到调用数据时,才会访问数据
直接访问数据的情况
迭代
序列化
与if合用返回查询集的方法就是过滤器
all()
filter() -- 返回符合条件的数据
filter(键=值,键=值)
filter(键=值).filter(键=值)
以上写法条件都是且关系exclude() -- 过滤掉符合条件的数据
order_by() -- 排序
values() -- 一条数据就是一个对象(字典),一返回一个列表
返回单个数据
get() -- 返回一个满足条件的对象,如果没有找到符合条件的对象,会引发一个模型类异常(未找到异常),如果找到对个对象也会引发一个异常count() -- 返回当前查询集中的对象个数
first() -- 返回查询集中的第一个对象
last() -- 返回查询集中的最后一个对象
exists() -- 判断查询集中是否有数据,有返回true否则返回false
限制查询集 -- 返回列表,可以使用下标的方法进行限制,等同于sql中的limit语句
注意:下标不能是负数查询集的缓存 -- 每个查询集都包含一个缓存,来最小化的对数据库访问(减少数据库的查询压力)
在新建的查询集中,缓存是为空,第一次对查询集求值(直接访问数据库),此时会发生缓存,在下次访问相同的数据时,会优先访问缓存-
字段查询 -- 实现了sql中的where语句,作为过滤器的参数(条件)
语法:属性名__比较运算符=值
如:age__gt=20
查询外键:属性名_id
转义:sql中的like语句中的%为通配符(模糊查询),如果需要向匹配%则需要转移name__contains='%'
比较运算符
exact -- 判断,大小写敏感
contains -- 是否包含,大小敏感
startswith/endswith -- 以什么开头/以什么结尾
以上加上一个i就表示不区分大小写
isnull/isnotnull -- 是否为空/不为空
in -- 是否包含在范围内
gt/gte/lt/lte/ -- 大于、大于等于、小于、小于等于
year/month/day/week_day/hour/minute/second -- 时间相关
关联查询 -- 类sql中的内关联和外关联
查询快捷 -- pk -- 主键聚合函数 -- 使用aggregate()函数返回的值
AVG
Count
Max
Min
Sum
F对象 -- 支持算数运算和相同对象间的字段比较
Q对象 -- 过滤器中的方法中的关键字参数,最要做条件组合(且 &、或 | 、非 ~ )
只有一个Q对象时就是用于单条件过滤(有跟没有一样)