一對一的關係: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