更新時(shí)間:2022-08-24 來(lái)源:黑馬程序員 瀏覽量:
管理器是Django的模型進(jìn)行數(shù)據(jù)庫(kù)操作的接口,Django應(yīng)用的每個(gè)模型都擁有至少一個(gè)管理器Django支持自定義管理器類(lèi),繼承自models.Manager,自定義管理器類(lèi)主要用于兩種情況:
1.修改原始查詢集,重寫(xiě)get_queryset()方法
2.向管理器類(lèi)中添加額外的方法,如創(chuàng)建對(duì)象
1.修改原始查詢集,重寫(xiě)get_queryset()方法
打開(kāi)booktest/models.py文件,定義類(lèi)BookInfoManager
#圖書(shū)管理器 class BookInfoManager(models.Manager): def get_queryset(self): #默認(rèn)查詢未刪除的圖書(shū)信息 #調(diào)用父類(lèi)的成員語(yǔ)法為:super(子類(lèi)型, self).成員 return super(BookInfoManager, self).get_queryset().filter(isDelete=False)
在模型類(lèi)BookInfo中定義管理器
class BookInfo(models.Model): ... books = BookInfoManager()
2.在管理器類(lèi)中定義創(chuàng)建對(duì)象的方法
當(dāng)創(chuàng)建模型類(lèi)對(duì)象時(shí),django不會(huì)對(duì)數(shù)據(jù)庫(kù)進(jìn)行讀寫(xiě)操作,調(diào)用save()方法才與數(shù)據(jù)庫(kù)交互,進(jìn)行insert或update操作,將數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中,如果模型類(lèi)的屬性比較多,逐個(gè)屬性賦值很麻煩,推薦使用管理器方式。打開(kāi)booktest/models.py文件,定義方法create。
class BookInfoManager(models.Manager): ... #創(chuàng)建模型類(lèi),接收參數(shù)為屬性賦值 def create(self, title, pub_date): #創(chuàng)建模型類(lèi)對(duì)象self.model可以獲得模型類(lèi) book = self.model() book.btitle = title book.bpub_date = pub_date book.bread=0 book.bcommet=0 book.isDelete = False return book
為模型類(lèi)BookInfo定義管理器books語(yǔ)法如下:
class BookInfo(models.Model): ... books = BookInfoManager()
調(diào)用語(yǔ)法如下:
調(diào)用:book=BookInfo.books.create_book("abc",date(1980,1,1)) 保存:book.save()