django學習筆記009-模型_模型管理器對象(重寫objects類設計自己需要的功能)

一,什麼是模型管理器對象?
前面我們講到了django的模型類的使用,當我們對模型類進行查詢時使用類名.objects.all()獲取此模型類下的所有數據的
那麼爲什麼要使用.objects呢?
在這裏插入圖片描述因爲objects是django自動生成的管理器對象,通過這個對象可以實現對數據的查詢
objects是models.manager 類的一個對象,我們可以自定義這個對象,自定義後系統就不在爲我們自動生成
二,創建自己的管理器對象
在應用的models.py 中進行創建:book=models.Manager()
注意新建哪個類的管理器對象就需要在哪個類中寫
在這裏插入圖片描述
此時我們再用objects進行查詢就會報錯:(注意更改manage.py文件後需要quit();shell再重新進入)

在這裏插入圖片描述
因爲我們自定義對象後系統就不會自動爲我們生成objects對象
但是此時可以用我們寫的book對象進行操作
在這裏插入圖片描述
三,繼承Manager的類的重寫
我們可以寫一個繼承manager類實現我們自己 的一些操作:
新建:

from django.db import models
#設計和表模型類的數據
# Create your models here.
class BookInfoManager(models.Manager):  #繼承models.Manager
    def all(self):  #重寫all方法
        books=super(BookInfoManager, self).all()  #調用父類的all方法(super爲父類)
        book=books.filter(id=2)  #獲得id爲2的
        return book
    

在這裏插入圖片描述
在BookInfo類裏面新建BookInfoManager的對象:

 objects=BookInfoManager()

退出shell再重新進入執行objects.all():

 from booktest.models import BookInfo
BookInfo.objects.all()

可以發現此時只得到了id爲2
的數據實現了數據的過濾
在這裏插入圖片描述
同時也可以在繼承類中寫自己的方法,實現自己需要的功能
三,模型管理器對象和模型類的關係
模型類是對數據庫文件進行插入操作,通過模型管理器對象進行查詢,我們對模型管理器類進行重寫,實現數據的過濾或者一些特定的功能

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章