2018-12-01 模型

查询集:表示从数据库中获取的对象集合
查询集可以有多个过滤器

  1. 在管理器上调用过滤方法

  2. 查询集经过过滤器筛选后返回一个新的查询集,所以可以写链式调用

  3. 惰性执行 -- 创建查询集不会带来任何数据库的访问直到调用数据时,才会访问数据

  4. 直接访问数据的情况
      迭代
      序列化
      与if合用

  5. 返回查询集的方法就是过滤器
    all()
    filter() -- 返回符合条件的数据
      filter(键=值,键=值)
      filter(键=值).filter(键=值)
      以上写法条件都是且关系

  6. exclude() -- 过滤掉符合条件的数据

  7. order_by() -- 排序

  8. values() -- 一条数据就是一个对象(字典),一返回一个列表

  9. 返回单个数据
      get() -- 返回一个满足条件的对象,如果没有找到符合条件的对象,会引发一个模型类异常(未找到异常),如果找到对个对象也会引发一个异常

  10. count() -- 返回当前查询集中的对象个数

  11. first() -- 返回查询集中的第一个对象

  12. last() -- 返回查询集中的最后一个对象

  13. exists() -- 判断查询集中是否有数据,有返回true否则返回false

  14. 限制查询集 -- 返回列表,可以使用下标的方法进行限制,等同于sql中的limit语句
    注意:下标不能是负数

  15. 查询集的缓存 -- 每个查询集都包含一个缓存,来最小化的对数据库访问(减少数据库的查询压力)
    在新建的查询集中,缓存是为空,第一次对查询集求值(直接访问数据库),此时会发生缓存,在下次访问相同的数据时,会优先访问缓存

  16. 字段查询 -- 实现了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对象时就是用于单条件过滤(有跟没有一样)

推荐阅读更多精彩内容