教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

如何在管理器Manager中修改和創(chuàng)建對(duì)象?

更新時(shí)間:2022年11月14日15時(shí)48分 來(lái)源:傳智教育 瀏覽次數(shù):

管理器是Django的模型進(jìn)行數(shù)據(jù)庫(kù)操作的接口,Django應(yīng)用的每個(gè)模型都擁有至少一個(gè)管理器Django支持自定義管理器類,繼承自models.Manager,自定義管理器類主要用于兩種情況:

1.修改原始查詢集,重寫get_queryset()方法

2.向管理器類中添加額外的方法,如創(chuàng)建對(duì)象

1.修改原始查詢集,重寫get_queryset()方法

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

模型類BookInfo中定義管理器

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è)屬性賦值很麻煩,推薦使用管理器方式。打開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()

為模型類BookInfo定義管理器books

調(diào)用語(yǔ)法如下:

調(diào)用:book=BookInfo.books.create_book("abc",date(1980,1,1))
保存:book.save()



0 分享到:
和我們?cè)诰€交談!