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