Complex lookups with Q objects(Q对象的复杂查询)

仅仅靠单一的关键字参数查询已经很难满足查询要求。此时Django为我们提供了Q查询:

class Q

1、Q对象(django.db.models.Q)可以对关键字参数进行封装,从而更好地应用多个查询,下面是最简单的例子:

from django.db.models import Q
from login.models import New  #假设在我的login app的models.py下有New数据类
q1=New.objects.filter(Q(question__startswith='What'))

2、可以组合使用&,|操作符,当一个操作符是用于两个Q的对象,它产生一个新的Q对象。

Q(question__startswith='Who') | Q(question__startswith='What')

3、Q对象可以用~操作符放在前面表示否定,也可允许否定与不否定形式的组合

Q(question__startswith='Who') | ~Q(pub_date__year=2005)

4、应用范围:

Each lookup function that takes keyword-arguments (e.g. filter()exclude()get()) can also be passed one or more Q objects as positional (not-named) arguments. If you provide multiple Q object arguments to a lookup function, the arguments will be “AND”ed together. For example:

Poll.objects.get(Q(question__startswith='Who'),Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))
)
... roughly translates into the SQL:SELECT * from polls WHERE question LIKE 'Who%'AND (pub_date = '2005-05-02' OR pub_date = '2005-05-06')

5、Q对象可以与关键字参数查询一起使用,不过一定要把Q对象放在关键字参数查询的前面。

正确:
Poll.objects.get(Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)),question__startswith='Who')
错误:
Poll.objects.get(question__startswith='Who',Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)))

转自:http://www.cnblogs.com/BeginMan/archive/2013/04/17/3026243.html

Django的Q查询相关推荐

  1. Django 的F查询与Q查询,事物

           F查询 Django 提供 F() 来做这样的比较.F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值 示例1: 查询出卖出数大于库存数的商品 from ...

  2. Django的mode的分组查询和聚合查询和F查询和Q查询

    1.聚合查询 # 聚合函数aggregate,求指定字段的最大值,最小值,平均值,和的值,方法如下from django.db.models import Avgfrom django.db.mode ...

  3. Django 【第六篇】ORM跨表操作(聚合查询,分组查询,F和Q查询等)

    一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出 ...

  4. django 中的聚合和分组 F查询 Q查询 事务cookies和sessions 066

    django 中的聚合和分组 F查询 Q查询 事务cookies和sessions 066 1 聚合和分组 聚合:对一些数据进行整理分析 进而得到结果(mysql中的聚合函数) 1aggregate( ...

  5. Django聚合分组查询(F与Q查询|ORM查询优化|常见字段参数)

    文章目录 一.正反向查询进阶操作 二.聚合查询 三.分组查询 四.ORM再次添加字段 五.F与Q查询 五.ORM查询优化 六.事务操作 七.模型层常见字段 八.ORM常见字段参数 九.多对多三种创建方 ...

  6. Django Model各种操作 Meta 常用字段 一对多操作 多对对操作 F Q查询 聚合函数

    Model操作 meta源信息 class CLS(models.Model):username = models.CharField(max_length=32)class Meta:db_tabl ...

  7. Day51python Django 多表操作 聚合查询、分组查询、F查询、Q查询

    1聚合查询aggregate aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典,可以自己制定键. 1.# 计算所有图书的平均价格 books = mo ...

  8. django 中的聚合函数,分组函数,F 查询, Q查询

    先以mysql的语句,聚合用在分组里, 对mysql中groupby 是分组 每什么的时候就要分组,如 每个小组,就按小组分, group by 字段 having 聚合函数 #举例  :求班里的平均 ...

  9. Django 时间查询、avg、acount、cum、F查询、Q查询

    0. 回顾 上次的问题,on_delete 不需要重新修改或重复操作数据库就可以执行到结果 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2021010420121 ...

最新文章

  1. HDU3247 Resource Archiver(AC自动机+BFS+DP)
  2. 用GPG保卫你的重要文件-GnuPG/Gpg4win使用说明
  3. Java基础学习总结(19)——Java环境变量配置
  4. Web Client Software Factory系列(3):View-Presenter模式
  5. Java多线程编程(1)--Java中的线程
  6. win下常用快捷鍵及其作用
  7. Win11系统Windows更新疑难解答出现问题怎么办?
  8. 181006扇贝有道每日一句
  9. 【仿真】Proteus8.9 下载与安装教程(超详细)
  10. java-pdf转word
  11. python bartender,python集成Bartender的多线程编程
  12. Sqli-Lab实验环境搭建(phpstudy环境安装、火狐浏览器插件安装、sqlmap安装、Sqli-Lab安装)
  13. html图片幻灯片效果,使用CSS3实现的超酷幻灯图片效果
  14. 需要良好的空气质量数据,希望您生活在一个富裕的社区
  15. 华为交换机添加用户及用户等级
  16. 《手把手教你读财报》- 读书总结
  17. 一位软件测试工程师的5年成长经历,这些职场黑话,你需要知道
  18. A - 小彭玉的扫荡食堂计划
  19. 计算机网络知识点总结(计网期末盲押系列)
  20. android 复制屏幕,iphone或者android的手机或者pad可以屏幕复制到Z1上了!

热门文章

  1. 世界女性科技群落(一):一面喑哑、一面高亢的非洲鼓
  2. PNG文件编码解析之PNG文件格式中的所有数据块以及标识
  3. “揭开意识的奥秘:认知相对论”及作者李玉鑑简介 (公号发“李玉鑑AI”下载PDF资料,欢迎转发、赞赏支持科普)
  4. docker-machine win10环境搭建及使用(hyperv虚拟机)
  5. Ubuntu Server 20.04 LTS 安装配置 PostgreSQL
  6. C语言二分查找算法[基础算法]
  7. 用java的二维数组做一个简易计算优惠小程序(附带源码)
  8. 字节跳动后端实习面经,一面+二面+三面(已收到offer)
  9. 月薪10k,20k,30k,40k及以上的程序员分别有何不同?
  10. 鸡尾酒分类和制作材料中英文名