1.聚合
https://blog.csdn.net/cckavin/article/details/82454174
from django.db.models import Avg
Book.objects.all().aggregate(Avg('price'))
{'price__avg': 34.35}
# 价格最高的书和所有书的平均价格之间的差异。
>>> from django.db.models import FloatField
>>> Book.objects.aggregate(
... price_diff=Max('price', output_field=FloatField()) - Avg('price'))
{'price_diff': 46.85}
# 查询每个出版社所拥有的书的数量
>>> from django.db.models import Count
>>> pubs = Publisher.objects.annotate(num_books=Count('book'))
>>> pubs
<QuerySet [<Publisher: BaloneyPress>, <Publisher: SalamiPress>, ...]>
>>> pubs[0].num_books
73
2.django中的F查询和Q查询
from django.db.models import Q
print(Book.objects.filter(Q(id=3)|Q(title="Go"))[0]) # 查询id=3或者标题是“Go”的书
print(Book.objects.filter(Q(price__gte=70)&Q(title__startswith="J"))) # 查询价格大于等于70并且标题是“J”开头的书
print(Book.objects.filter(Q(title__startswith="J") & ~Q(id=3))) # 查询标题是“J”开头并且id不是3的书
# Q对象可以与关键字参数查询一起使用,必须把普通关键字查询放到Q对象查询的后面
print(Book.objects.filter(Q(price=70)|Q(title="Python"), publication_date="2017-09-26"))
from django.db.models import F
Book.objects.update(price=F("price")+20) # 对于book表中每本书的价格都在原价格的基础上增加20元
Student.objects.filter(age__gt=F('age2')) # 和models自身的字段进行对比