首頁(yè)技術(shù)文章正文

Python培訓(xùn):在管理器Manager中修改和創(chuàng)建對(duì)象

更新時(shí)間:2022-08-24 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

管理器是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()

1661333892903_21.png

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()





分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!