文章目录

  • Models多条件查询方法:
    • 1、传参数
    • 2、传字典
    • 3、传Q对象,构造搜索条件
    • 4、Q对象使用实例:
    • F对象
    • Q对象

详情查看此参考链接

Models多条件查询方法:

1、传参数


models.UserInfo.objects.filter(id=3,name='alex')

2、传字典

需要注意的是,传入字典时,字典前面需要加** ,记为字典

dic = {'id':123,'name':'alex'}
models.UserInfo.objects.filter(**dic)

所以我们可以在在捕捉用户输入后,将输入构造成字典,然后将字典当做参数传入查询

3、传Q对象,构造搜索条件

  • a、在 filter() 等函式中关键字参数彼此之间都是 “AND” 关系。如果你要执行更复杂的查询(比如,
    实现筛选条件的 OR 关系),可以使用 Q 对象。
  • b、Q对象包括 AND 关系 和OR 关系
  • c、Q 对象可以用 & 和 | 运算符进行连接。当某个操作连接两个 Q 对象时,就会产生一个新的等
    价的 Q 对象。

如:下面这段语句就产生了一个 Q ,这是用 “OR” 关系连接

Q(question__startswith='Who') | Q(question__startswith='What')
  • d、每种查询函式(比如 filter(), exclude(), get()) 除了能接收关键字参数以外,也能以位置参数的
    形式接受一个或多个 Q 对象。如果你给查询函式传递了多个 Q 对象,那么它们彼此间都是
    “AND” 关系。例如:
Poll.objects.get(
Q(question__startswith='Who'),
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))
)
  • e: filter() 等函数 可以接受 Q对象和条件参数,但Q对象必须放在 条件参数前面

4、Q对象使用实例:

  • 首先还是需要导入模块

from django.db.models import Q
  • 传入条件进行查询:
q1 = Q()
q1.connector = 'OR'              #连接方式
q1.children.append(('id', 1))
q1.children.append(('id', 2))
q1.children.append(('id', 3))models.Tb1.objects.filter(q1)
  • 合并条件进行查询:

con = Q()q1 = Q()
q1.connector = 'OR'
q1.children.append(('id', 1))
q1.children.append(('id', 2))
q1.children.append(('id', 3))q2 = Q()
q2.connector = 'OR'
q2.children.append(('status', '在线'))con.add(q1, 'AND')
con.add(q2, 'AND')models.Tb1.objects.filter(con)

F对象

  • 可以使用模型的字段A与字段B进行比较,如果A写在了等号的左边,则B出现在等号的右边,需要通过F对象构造

list.filter(bread__gte=F('bcommet'))
  • django支持对F()对象使用算数运算

list.filter(bread__gte=F('bcommet') * 2)
  • F()对象中还可以写作“模型类__列名”进行关联查询

list.filter(isDelete=F('heroinfo__isDelete'))
  • 对于date/time字段,可与timedelta()进行运算

list.filter(bpub_date__lt=F('bpub_date') + timedelta(days=1))

Q对象

  • 过滤器的方法中关键字参数查询,会合并为And进行
  • 需要进行or查询,使用Q()对象
  • Q对象(django.db.models.Q)用于封装一组关键字参数,这些关键字参数与“比较运算符”中的相同

from django.db.models import Q
list.filter(Q(pk_ _lt=6))
  • Q对象可以使用&(and)、|(or)操作符组合起来
  • 当操作符应用在两个Q对象时,会产生一个新的Q对象

list.filter(pk_ _lt=6).filter(bcommet_ _gt=10)
list.filter(Q(pk_ _lt=6) | Q(bcommet_ _gt=10))
  • 使用~(not)操作符在Q对象前表示取反

list.filter(~Q(pk__lt=6))
  • 可以使用&|~结合括号进行分组,构造做生意复杂的Q对象
    -过滤器函数可以传递一个或多个Q对象作为位置参数,如果有多个Q对象,这些参数的逻辑为and
  • 过滤器函数可以混合使用Q对象和关键字参数,所有参数都将and在一起,Q对象必须位于关键字参数的前面

Django Models 多条件查询 以及Q/F查询相关推荐

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

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

  2. day08 外键字段的增删改查 正向反向插叙概念 跨表查询 聚合查询与分组查询 F查询

    day08 外键字段的增删改查 正向反向插叙概念 跨表查询 聚合查询与分组查询 F查询 昨日内容复习 自定义过滤器.标签.inclusion_tag 1.首先现在应用目录下创建名字为templatet ...

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

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

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

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

  5. Django学习笔记(3):使用模型类进行查询(查询函数、F对象、Q对象、聚合函数、查询集、模型类关系、关联查询、自关联、管理器)

    文章目录 1.查询函数 2.F对象 3.Q对象 4.聚合函数 5.Count函数 6.查询集 查询集的特性 对查询集进行切片 判断一个查询集中是否有数据 7.模型类之间的关系 一对多关系 多对多关系 ...

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

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

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

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

  8. 第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、并且——queryset对象序列化...

    第三百零九节,Django框架,models.py模块,数据库操作--F()和Q()运算符:|或者.&并且 F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from dj ...

  9. Web框架之Django_06 模型层了解(F查询、Q查询、事务、update和save、only和defer、choice属性、bulk_create)

    阅读目录 一.F查询 二. Q查询 三.事务 四.补充的一些常用的操作 摘要: F查询 Q查询 事务 一.F查询 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个我们自己设定的常量做比较.如果 ...

最新文章

  1. 浅谈https\ssl\数字证书
  2. 如何快速采集分析平台日志,并进行展示监控?
  3. 小牛电动CEO李彦内部信:再大困难 也成涅槃重生的试炼
  4. android中ListView控件onItemClick事件中获取listView传递的数据
  5. weexpack占据的存储空间
  6. webpack+react+redux+es6开发模式---续
  7. js+css实现验证码框,前端实现6位验证码输入框效果
  8. 【华为云技术分享】Linux内核发展史 (2)
  9. 管理docker容器
  10. 【机器学习】标准化和归一化辨析
  11. 光栅透过率计算 (Matlab)
  12. phpcms后台登陆页面存放地址
  13. matlab 表示希腊字母yita,数学罗马符号_常用数学的罗马符号和拉丁符号有什么哪些_淘题吧...
  14. c#实现Udp通信(四)--UPD大数据量接收(异步接收)
  15. 2021/1/26-每日三题第33弹:皮皮虾,我们走 !你知道什么是面向对象编程和面向过程编程吗 ???
  16. 美团即时零售的优势不止“快”
  17. 电机qudong电路
  18. Word 自动更新编号(插入题注、交叉引用)
  19. 计算机毕业技术,JAVA.JSP药店管理系统论文
  20. 宅在家太无聊了,我用Python做了一个能作弊的抽奖程序

热门文章

  1. 『机房工程』弱电必备技能培训PPT/值得您分享
  2. php源代码压缩,PHP_PHP 源代码压缩小工具,使用方法:(在命令行运行) 复 - phpStudy...
  3. java swing鼠标事件监听_java swing鼠标监听问题
  4. ML之分类预测:基于sklearn库的七八种机器学习算法利用糖尿病(diabetes)数据集(8→1)实现二分类预测
  5. PyTorch:采用sklearn 工具生成这样的合成数据集+利用PyTorch实现简单合成数据集上的线性回归进行数据分析
  6. JavaWeb学习总结(六)—HttpServletResponse
  7. 【UVA 437】The Tower of Babylon(记忆化搜索写法)
  8. 操作系统-命令解释程序(实验一)
  9. [转+总结]Linux虚拟系统安装VMware Tools总结
  10. ◆[转]瓶子生日密码之2月2日