annotate

可以通过计算查询结果中每一个对象所关联的对象集合,从而得出总计值(也可以是平均值或总和),即为查询集的每一项生成聚合。

from django.shortcuts import render, HttpResponse
from app01 import models
from app01.models import Book,Author,Publisher
from django.db.models import Avg,Min,Sum,Max def data_oper(req):
# 查询每个出版社书的总价
obj = models.Book.objects.values("publisher__name").annotate(Sum("price"))
print(obj)
return HttpResponse("Hello world")

# 查询 klvchen 出的书总价格
...
def data_oper(req):
obj = Book.objects.filter(authors__name="klvchen").aggregate(Sum("price"))
print(obj)
return HttpResponse("Hello world")

F查询

F 使用查询条件的值,专门取对象中某列值的操作

from django.shortcuts import render, HttpResponse
from app01 import models
from app01.models import Book,Author,Publisher
from django.db.models import Avg,Min,Sum,Max
from django.db.models import F # 书籍的价格都加20
def data_oper(req):
models.Book.objects.all().update(price=F("price")+20)
return HttpResponse("Hello world")

Q 查询

Q 构建搜索条件

from django.shortcuts import render, HttpResponse
from app01 import models
from app01.models import Book,Author,Publisher
from django.db.models import Avg,Min,Sum,Max
from django.db.models import F,Q
from django.db.models import F,Q # 查询 book 表 id 为3的书名,这里书名是因为在 models.py 定义的 class Book 里面 __str__ 返回的是 title 字段
def data_oper(req):
obj = models.Book.objects.filter(Q(id=3))[0]
print(obj)
return HttpResponse("Hello world")

.....
from django.db.models import F,Q # 查询 book 表 id为3或者 title 为 GO 的记录
def data_oper(req):
obj = models.Book.objects.filter(Q(id=3)|Q(title="GO"))
print(obj)
return HttpResponse("Hello world")

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

from django.db.models import F,Q

def data_oper(req):
obj = models.Book.objects.filter(Q(price__gt=50)&(Q(id=3)|Q(title="php")), publisher_id=1)
print(obj)
return HttpResponse("Hello world")

最新文章

  1. OpenCASCADE AIS Manipulator
  2. net-snmp源码VS2013编译添加加密支持(OpenSSL)(在VS里配置编译OpenSSL)
  3. jquery.form.js表单插件的使用
  4. makefile高级用法--使用函数
  5. JavaScript(10)——Ajax以及跨域处理
  6. Maven项目中提示:Eclipse “cannot be resolved to a type” error
  7. (转)sizeof
  8. mac的terminal快捷键
  9. swagger-codegen自动生成代码工具的介绍与使用
  10. HDU - 1062
  11. ANSYS中的阻尼damper
  12. java效率取随机不重复数
  13. 线程安全的集合类、CopyOnWrite机制介绍(转)
  14. 无名管道跟dup,dup的使用
  15. C# 通过 HTTPModule 防范 DOS
  16. 深入浅出 Java Concurrency (14): 锁机制 part 9 读写锁 (ReentrantReadWriteLock) (2)
  17. thinkphp5 toArray()报错
  18. 算法笔记_085:蓝桥杯练习 9-3摩尔斯电码(Java)
  19. php查询mysql时,报超出内存错误(select count(distinct))时
  20. suse更改root密码

热门文章

  1. AOP注解方式
  2. pat1064. Complete Binary Search Tree (30)
  3. $.ajax仿axios封装
  4. HttpClient向后端的WebAPI工程发送HTTP的Post请求时,返回超过了最大请求长度的异常的解决方法
  5. usb-host一步一步学(二)安卓在usb-host模式下列出当前连接的usb设备
  6. JavaWeb前端笔记
  7. 用C++/CLI搭建C++和C#之间的桥梁
  8. PHP函数:mysql_fetch_assoc指针重置
  9. CentOS-7系统安装配置
  10. JavaScript-判断语句(if...else)