-
模型實例方法
- str:在將對象轉換成字符串時會被調用
- save():將模型對象保存到數據表中.
- delete()將模型類對象從數據表中刪除
-
模型類的屬性
- 屬性objects:管理器,是Manger類型的對象,用于與數據庫進行交互.
- 當沒有為模型類定義管理器時,Django會為模型類生成一個名為objects的管理器,自定義管理器后,Django不再生成默認管理器objects
- 為模型類BookInfo定義管理器books語法如下
class BookInfo(models.Model): ... books = models.Manager()
-
管理器Manager
- 管理器是Django的模型進行數據庫操作的接口,Django應用的每個模型都擁有至少一個管理器
- Django支持自定義管理器類,繼承自models.Manager
- 自定義管理器類主要用于兩種情況(所以一般情況是不用自定義的.嗯嗯.!)
- 修改原始查詢集,重寫get_queryset()方法
##圖書管理器 class BookInfoManager(models.Manager): def get_queryset(self): #默認查詢未刪除的圖書信息 #調用父類的成員語法為:super(子類型, self).成員 return super(BookInfoManager, self).get_queryset().filter(isDelete=False)- 在模型類BookInfo中定義管理器
class BookInfo(models.Model): ... books = BookInfoManager()
- 修改原始查詢集,重寫get_queryset()方法
2. 向管理器類中添加額外的方法,如創(chuàng)建對象(這里說到的名詞是添加額外,所以**父類的方法就必須繼承了**!!)
-
字段屬性和選項(在對應的model里面的具體的類,比如class BookInfo(models.Model))
-
模型類屬性命名限制:
- 不能是python的保留關鍵字
- 不允許使用連續(xù)的下劃線,這是有django的查詢方法決定的.
定義屬性時需要指定字段類型,通過字段類型的參數指定選項,語法如下:
屬性=models.字段類型(選項)-
字段類型
- AutoField 自動增長的IntegerField,通常不用指定,不指定時Django會自動創(chuàng)建屬性名為id的自動增長屬性
- BooleanField 布爾字段,值為True或False
- NullBooleanField 支持Null、True、False三種值
- CharField(max_length=字符長度) 字符串--參數max_length表示最大字符個數
- TextField 大文本字段,一般超過4000個字符時使用
- IntegerField 整數
- DecimalField(max_digits=None, decimal_places=None)
- 十進制浮點數
- 參數max_digits表示總位數
- 參數decimal_places表示小數位數
- FloatField 浮點數
- DateField[auto_now=False, auto_now_add=False]) 日期
- 參數auto_now表示每次保存對象時,自動設置該字段為當前時間,用于"最后一次修改"的時間戳,它總是使用當前日期,默認為false
- 參數auto_now_add表示當對象第一次被創(chuàng)建時自動設置當前時間,用于創(chuàng)建的時間戳,它總是使用當前日期,默認為false
- 參數auto_now_add和auto_now是相互排斥的,組合將會發(fā)生錯誤
- TimeField:時間,參數同DateField
- DateTimeField 日期時間,參數同DateField
- FileField:上傳文件字段
- ImageField:繼承于FileField,對上傳的內容進行校驗,確保是有效的圖片
-
選項
- null:如果為True,表示允許為空,默認值是False
- blank:如果為True,則該字段允許為空白,默認值是False
- 對比:null是數據庫范疇的概念,blank是表單驗證證范疇的
- db_column:字段的名稱,如果未指定,則使用屬性的名稱
- db_index:若值為True, 則在表中會為此字段創(chuàng)建索引,默認值是False
- default:默認值
- primary_key:若為True,則該字段會成為模型的主鍵字段,默認值是False,一般作為AutoField的選項使用
- unique:如果為True, 這個字段在表中必須有唯一值,默認值是False
-
關系字段類型
- 關系型數據庫的關系包括三種類型:
- ForeignKey:一對多,將字段定義在多的一端中
- ManyToManyField:多對多,將字段定義在兩端中
- OneToOneField:一對一,將字段定義在任意一端中
- 可以維護遞歸的關聯關系,使用'self'指定,詳見“自關聯”
- 由一到多的訪問語法:
#對象.模型類小寫_set #例: bookinfo.heroinfo_set - 由一到一的訪問語法
#對象.模型類小寫 #例: heroinfo.bookinfo - 訪問關聯對象的id語法
# 對象.屬性_id #例: heroinfo.book_id
- 關系型數據庫的關系包括三種類型:
-
元選項
- 數據表的默認名稱為
在模型類中定義類Meta,用于設置元信息,如使用db_table自定義表的名字#<app_name>_<model_name> #例: booktest_bookinfo
- 數據表的默認名稱為
-
-
在models.py底下,如果想在一些派生類里面自定義數據表名的話,可以
- 重新定義class Meta:
db_table = 'bookinfo' - 測試過后,
- 發(fā)現原來如果是使用自帶的ORM創(chuàng)建的數據表的名字應該是app_+這個派生類的名字
- 例如 booktest_bookinfo
- 現在就變成了 bookinfo
- 發(fā)現原來如果是使用自帶的ORM創(chuàng)建的數據表的名字應該是app_+這個派生類的名字
- 重新定義class Meta: