Django框架自定義模型管理器與元選項用法分析
本文實例講述了Django框架自定義模型管理器與元選項用法。分享給大家供大家參考,具體如下:
自定義模型管理器
每個模型類默認都有一個 objects 類屬性,可以把它叫 模型管理器。它由django自動生成,類型為
django.db.models.manager.Manager
可以在模型類中自定義模型管理器,自定義后, Django將不再生成默認的 objects。(模型類可以自定義多個管理器)
例如:
class Department(models.Model): # 自定義模型管理器 manager = models.Manager()
調(diào)用 Department.objects會拋出AttributeError異常,而 Department.manager.all()會返回一個包含所有Department對象的列表。
兩種情況需要自定義管理器
修改管理器返回的原始查詢集
需求: 調(diào)用 Department.manager.all()
返回的是2009年之后成立的部門
管理器類中添加額外的方法,幫我們操作模型類對應(yīng)的數(shù)據(jù)表
需求: 在管理器類中,定義一個創(chuàng)建部門的方法
一、自定義模型管理器
class DepartmentManager(Manager): # 修改管理器返回的原始查詢集 def all(self): """重寫all方法:只返回2009年之后成立的部門""" return super().all().filter(create_date__gte=date(2009,1,1)) # 在模型管理器中封裝增刪查的方法 def create_dep(self, name, create_date): """新增一個部門""" dep = Department() dep.name = name dep.create_date = create_date dep.save() return dep # 返回新增后的員工對象
二、在模型類中使用自定義的模型管理器
class Department(models.Model): """部門類""" ... # 自定義模型管理器(默認的objects就不會再生成) objects = DepartmentManager()
三、在視圖函數(shù)中,使用自定義的模型管理器中的方法
def add_dep(request): """新增部門""" # d = Department() # d.name = '財務(wù)部' # d.create_date = date(2018, 1, 1) # d.save() # 調(diào)用自定義的模型管理器,新增一個部門 Department.objects.create_dep('財務(wù)部', date(2018, 1, 1)) # 返回的不再是所有的部門,而是2009年之后成立的部門 # Department.objects.all() return redirect('/show_deps')
元選項(Meta)
一、修改表名:
Django默認生成的表名:
應(yīng)用名小寫_模型類名小寫
可以通過在模型類中定義Meta類來修改表名:
class Department(models.Model): """部門類""" name = models.CharField(max_length=20) class Meta(object): """指定表名""" db_table = "department"
重新生成遷移文件,并遷移生成表,查看表名是否有修改
二、修改模型類在管理后臺的顯示名稱
class Meta: # 定義表名 db_table = 'department' # 定義在管理后臺顯示的名稱 verbose_name = '部門' # 指定復(fù)數(shù)時的名稱(去除復(fù)數(shù)的s) verbose_name_plural = verbose_name
希望本文所述對大家基于Django框架的Python程序設(shè)計有所幫助。
相關(guān)文章
python中numpy包使用教程之?dāng)?shù)組和相關(guān)操作詳解
這篇文章主要給大家介紹了關(guān)于python中numpy包的使用教程,包含數(shù)組和相關(guān)操作等內(nèi)容,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。2017-07-07Python微服務(wù)開發(fā)之使用FastAPI構(gòu)建高效API
微服務(wù)架構(gòu)在現(xiàn)代軟件開發(fā)中日益普及,它將復(fù)雜的應(yīng)用程序拆分成多個可獨立部署的小型服務(wù)。本文將介紹如何使用 Python 的 FastAPI 庫快速構(gòu)建和部署微服務(wù),感興趣的可以了解一下2023-05-05numpy中以文本的方式存儲以及讀取數(shù)據(jù)方法
今天小編就為大家分享一篇numpy中以文本的方式存儲以及讀取數(shù)據(jù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06Python2.x和3.x下maketrans與translate函數(shù)使用上的不同
這篇文章主要介紹了Python2.x和3.x下maketrans與translate函數(shù)使用上的不同,這兩個函數(shù)建立映射來替換內(nèi)容是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識,需要的朋友可以參考下2015-04-04Python爬蟲基于lxml解決數(shù)據(jù)編碼亂碼問題
這篇文章主要介紹了Python爬蟲基于lxml解決數(shù)據(jù)編碼亂碼問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-07-07Python 實現(xiàn)一個顏色色值轉(zhuǎn)換的小工具
這篇文章主要介紹了Python 實現(xiàn)一個顏色色值轉(zhuǎn)換的小工具的相關(guān)資料,需要的朋友可以參考下2016-12-12Python之sklearn數(shù)據(jù)預(yù)處理中fit(),transform()與fit_transform()的區(qū)別
這篇文章主要介紹了Python之sklearn數(shù)據(jù)預(yù)處理中fit(),transform()與fit_transform()的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02python中的logging模塊的簡單應(yīng)用和高級使用
在?Python?中,可以使用內(nèi)置的?logging?模塊來記錄應(yīng)用程序的信息,logging?模塊還提供了一些高級功能,如日志回溯、日志輪換、日志緩沖等,需要的朋友可以參考下2023-04-04