一对一的关系:OneToOneField 一对多的关系:ForeignKey 多对多的关系:ManyToManyField
1 一对多新增 -两种方式: -publish=对象 -publish_id=id 2 一对多删除:同单表删除 3 一对多修改:两种方式,能够传对象,能够传id 4 一对一跟一对多同样 5 多对多: -add ----->能够传对象,能够传id,能够传多个 -remove ----->能够传对象,能够传id,能够传多个 -clear ---->没有参数 -set ----->跟上面不同,必须传列表,列表里面能够是对象,能够是id
1 一对一 正向:正向查询按字段 反向:反向查询按表名小写 2 一对多 正向:正向查询按字段 反向:反向按表名小写_set.all() 3 多对多 正向:正向查询按字段.all() 反向查询:反向按表名小写_set.all() 4******基于对象的查询,屡次查询(子查询)
-连表查询 -一对一双下划线查询 -正向:按字段,跨表能够在filter,也能够在values中 -反向:按表名小写,跨表能够在filter,也能够在values中
# 计算全部图书的平均价格 from django.db.models import Avg Book.objects.all().aggregate(Avg('price'))
aggregate()是QuerySet的一个终止子句,意思是说,它返回一个包含一些键值对的字典。python
# 统计每一本书做者个数 res=Book.objects.all().annotate(c=Count('authors')).values('name','c') print(res)
终极总结: values在前,表示group by,在后,表示取值 filter在前,表示过滤(where),在后,表示having(对分组以后的结果再进行过滤)
终极总结:django
values在前,表示group by ,灾后表示取值函数
filter在前,表示where(过滤),在后表示having(对分组以后的结果在进行过滤)code
1.为了实现某个字段的值与另外一个字段的值相比较对象
2.实现数据修改操做rem
为了构造与&,或|,非~的关系class
filter的条件都是and关系 能够经过Q函数实现与或非import