Django框架自定義模型管理器與元選項(xiàng)用法分析
本文實(shí)例講述了Django框架自定義模型管理器與元選項(xiàng)用法。分享給大家供大家參考,具體如下:
自定義模型管理器
每個(gè)模型類默認(rèn)都有一個(gè) objects 類屬性,可以把它叫 模型管理器。它由django自動(dòng)生成,類型為
django.db.models.manager.Manager
可以在模型類中自定義模型管理器,自定義后, Django將不再生成默認(rèn)的 objects。(模型類可以自定義多個(gè)管理器)
例如:
class Department(models.Model): # 自定義模型管理器 manager = models.Manager()
調(diào)用 Department.objects會(huì)拋出AttributeError異常,而 Department.manager.all()會(huì)返回一個(gè)包含所有Department對(duì)象的列表。
兩種情況需要自定義管理器
修改管理器返回的原始查詢集
需求: 調(diào)用 Department.manager.all()返回的是2009年之后成立的部門
管理器類中添加額外的方法,幫我們操作模型類對(duì)應(yīng)的數(shù)據(jù)表
需求: 在管理器類中,定義一個(gè)創(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):
"""新增一個(gè)部門"""
dep = Department()
dep.name = name
dep.create_date = create_date
dep.save()
return dep # 返回新增后的員工對(duì)象
二、在模型類中使用自定義的模型管理器
class Department(models.Model): """部門類""" ... # 自定義模型管理器(默認(rèn)的objects就不會(huì)再生成) objects = DepartmentManager()
三、在視圖函數(shù)中,使用自定義的模型管理器中的方法
def add_dep(request):
"""新增部門"""
# d = Department()
# d.name = '財(cái)務(wù)部'
# d.create_date = date(2018, 1, 1)
# d.save()
# 調(diào)用自定義的模型管理器,新增一個(gè)部門
Department.objects.create_dep('財(cái)務(wù)部', date(2018, 1, 1))
# 返回的不再是所有的部門,而是2009年之后成立的部門
# Department.objects.all()
return redirect('/show_deps')
元選項(xiàng)(Meta)
一、修改表名:
Django默認(rèn)生成的表名:
應(yīng)用名小寫_模型類名小寫
可以通過(guò)在模型類中定義Meta類來(lái)修改表名:
class Department(models.Model):
"""部門類"""
name = models.CharField(max_length=20)
class Meta(object):
"""指定表名"""
db_table = "department"
重新生成遷移文件,并遷移生成表,查看表名是否有修改
二、修改模型類在管理后臺(tái)的顯示名稱

class Meta: # 定義表名 db_table = 'department' # 定義在管理后臺(tái)顯示的名稱 verbose_name = '部門' # 指定復(fù)數(shù)時(shí)的名稱(去除復(fù)數(shù)的s) verbose_name_plural = verbose_name
希望本文所述對(duì)大家基于Django框架的Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
python中numpy包使用教程之?dāng)?shù)組和相關(guān)操作詳解
這篇文章主要給大家介紹了關(guān)于python中numpy包的使用教程,包含數(shù)組和相關(guān)操作等內(nèi)容,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。2017-07-07
Python微服務(wù)開(kāi)發(fā)之使用FastAPI構(gòu)建高效API
微服務(wù)架構(gòu)在現(xiàn)代軟件開(kāi)發(fā)中日益普及,它將復(fù)雜的應(yīng)用程序拆分成多個(gè)可獨(dú)立部署的小型服務(wù)。本文將介紹如何使用 Python 的 FastAPI 庫(kù)快速構(gòu)建和部署微服務(wù),感興趣的可以了解一下2023-05-05
numpy中以文本的方式存儲(chǔ)以及讀取數(shù)據(jù)方法
今天小編就為大家分享一篇numpy中以文本的方式存儲(chǔ)以及讀取數(shù)據(jù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
Python2.x和3.x下maketrans與translate函數(shù)使用上的不同
這篇文章主要介紹了Python2.x和3.x下maketrans與translate函數(shù)使用上的不同,這兩個(gè)函數(shù)建立映射來(lái)替換內(nèi)容是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-04-04
python上下文管理的使用場(chǎng)景實(shí)例講解
在本篇文章里小編給大家整理的是一篇關(guān)于python上下文管理的使用場(chǎng)景實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-03-03
Python爬蟲(chóng)基于lxml解決數(shù)據(jù)編碼亂碼問(wèn)題
這篇文章主要介紹了Python爬蟲(chóng)基于lxml解決數(shù)據(jù)編碼亂碼問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
Python 實(shí)現(xiàn)一個(gè)顏色色值轉(zhuǎn)換的小工具
這篇文章主要介紹了Python 實(shí)現(xiàn)一個(gè)顏色色值轉(zhuǎn)換的小工具的相關(guān)資料,需要的朋友可以參考下2016-12-12
Python之sklearn數(shù)據(jù)預(yù)處理中fit(),transform()與fit_transform()的區(qū)別
這篇文章主要介紹了Python之sklearn數(shù)據(jù)預(yù)處理中fit(),transform()與fit_transform()的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
python中的logging模塊的簡(jiǎn)單應(yīng)用和高級(jí)使用
在?Python?中,可以使用內(nèi)置的?logging?模塊來(lái)記錄應(yīng)用程序的信息,logging?模塊還提供了一些高級(jí)功能,如日志回溯、日志輪換、日志緩沖等,需要的朋友可以參考下2023-04-04

