ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

F查询和Q查询

2019-09-19 23:57:42  阅读:148  来源: 互联网

标签:objects title models 查询 filter Book


F查询和Q查询

1. 当需要字段和字段作比较的时候用F查询

2. 当查询条件是 或 的时候 用Q查询,因为默认的filter参数都是且的关系

F查询

F可以帮我们取到表中某个字段对应的值来当作我的筛选条件,而不是我认为自定义常量的条件了,实现了动态比较的效果

Django 支持 F() 对象之间以及 F() 对象和常数之间的加减乘除和取模的操作。基于此可以对表中的数值类型进行数学运算

例子:

查询出卖出数大于库存数的商品

from django.db.models import F
ret1=models.Product.objects.filter(maichu__gt=F('kucun'))
print(ret1)

将书籍库存数全部增加1000

models.Book.objects.update(kucun=F('kucun')+1000)

把所有书名后面加上'新款'

     from django.db.models.functions import Concat
     from django.db.models import Value
ret3 = models.Book.objects.update(title=Concat(F('title'), Value('新款')))

models.Book.objects.update(title = F('title')+'新款') # 不能这么写

Q查询

Q查询可以组合使用 “&”, “|” 操作符,当一个操作符是用于两个Q的对象,它产生一个新的Q对象,

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

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

例子:

查询书籍名称是三国演义或者价格是444.44

    from django.db.models import Q
     res = models.Book.objects.filter(title='三国演义',price=444.44)  # filter只支持and关系
     res1 = models.Book.objects.filter(Q(title='三国演义'),Q(price=444))  # 如果用逗号 那么还是and关系
     res2 = models.Book.objects.filter(Q(title='三国演义')|Q(price=444))
     res3 = models.Book.objects.filter(~Q(title='三国演义')|Q(price=444))
     print(res2)

Q高级用法

q = Q()
    q.connector = 'or'  # 修改查询条件的关系   默认是and
    q.children.append(('title__contains','三国演义'))  # 往列表中添加筛选条件
    q.children.append(('price__gt',444))  # 往列表中添加筛选条件
    res = models.Book.objects.filter(q)  # filter支持你直接传q对象  但是默认还是and关系
    print(res)

 待完善......

标签:objects,title,models,查询,filter,Book
来源: https://www.cnblogs.com/xiongying4/p/11553343.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有