多表操作
基于对象的夸表查询(多次查询)
一对一:正向查询按字段,反向按表名小写
一对多:正向按字段(正向查询一定会查出一个来),反向查询按表名小写_set.all()(放回结果是queryset对象)
多对多:正向查询按字段.all()(正向查询一定会查出多个来),反向查询按表名小写_set.all()(返回结果是quertset对象)
基于双下划线的跨表查询
在filter和values中都可以做连表操作(也就是都可以写__)
正向查询按字段
反向查询按表名小写
以上查询无论谁做基表,都没有效率之分,本质上是一条sql语句将多个表拼成一起再查询
related_name:基于双下划线的跨表查询,修改反向查询的字段,related_query_name:基于对象的跨表查询,修改反向查询字段,可以理解为字段重命名
聚合查询:
from django.db.models import Count,Max,Min,Avg,Sum
分组查询: 以annotate()为分界线
group by 谁,就以谁做基表
values在前:表示group by
values在后:取值
filter在前:表示where条件
filter在后: 表示having
F与Q查询:
F查询:取出数据库中的值进行运算
Q查询:表示或,非的情况