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