自定義模型管理器
每個模型類預設都有乙個 objects 類屬性,可以把它叫 模型管理器。它由django自動生成,型別為
django.db.models.manager.manager
可以在模型類中自定義模型管理器,自定義後, django將不再生成預設的 objects。(模型類www.cppcns.com可以自定義多個管理器)
例如:class department(models.model):
# 自定義模型管理器
manager = models.manager()
呼叫 department.objects會丟擲attributeerror異常,而 department.manager.all()會返回乙個包含所有department物件的列表。
兩種情況需要自定義管理器
修改woyufb管理器返回的原始查詢集
需求: 呼叫department.manager.all()返回的是2023年之後成立的部門
管理器類中新增額外的方法,幫我們操作模型類對應的資料表
需求: 在管理器類中,定義乙個建立部門的方法
一、自定義模型管理器
class departmentmanager(manager):
# 修改管理器返回的原始查詢集
def all(self程式設計客棧):
"""重寫all方法:只返回2023年之後成立的部門"""
return super().all().filter(create_date__gte=date(20
# 在模型管理器中封裝增刪查的方法
def create_dep(self, name, create_date):
"""新增乙個部門"""
dep = department()
dep.name = name
dep.create_date = create_date
dep.s**e()
return dep # 返回新增後的員工物件
二、在模型類中使用自定義的模型管理器
class department(models.model):
"""部門類"""
...# 自定義模型管理器(預設的objects就不會再生成)
objects = departmentmanager()
三、在檢視函式中,使用自定義的模型管理器中的方法
def add_dep(request):
"""新增部門"""
# d department()
# d.name = '財務部'
# d.create_date = date(2018, 1, 1)
# d.s**e()
# 呼叫自定義的模型管理器,新增乙個部門
department.objects.create_dep('財務部', date(2018, 1, 1))
# 返回的不再是所有的部門,而是2023年之後成立的部門
# department.objects.all()
return redirect('/show_deps')
元選項(meta)
一、修改表名:
django預設生成的表名:
應用名小寫_模型類名小寫
可以通過在模型類中定義meta類來修改表名:
class department(models.model):
"""部門類"""
name = models.charfield(max_length=20)
class meta(object):
"""指定表名"""
db_table = "department"
重新生成遷移檔案,並遷移生成表,檢視表名是否有修改
二、修改模型類在管理後台的顯示名稱
class meta:
# 定義表名
db_table = 'department'
# 定義在管理後台顯示的名稱
verbose_name = '部門'
# 指定複數時的名稱(去除複數的s)
verbose_name_plural = verbose_name
本文標題: django框架自定義模型管理器與元選項用法分析
本文位址:
Django 自定義模型管理器
我們常常在view檢視裡查詢某個模型的資料的時候,通常的是這樣查詢的 上述每個模型類中都有乙個objects類屬性,可以叫他模型管理器。它由django自動生成,型別為django.db.models.manager.manager.我們可以將objects看做manager類的例項化物件,而上述的...
Django模型中自定義字段型別
在使用django模型建立表時,有時候不存在或者不滿足條件我們想要的表字段型別。這時我們可以繼承django模型中的field來實現自定義字段型別。如下所示 建立了乙個tinyint型別的字段 建立自定義字段型別 tinyint class tinyintfield models.field def...
Django 自定義標籤
模版是乙個用django模版語言標記過的python字串。模版可以包含模版標籤和變數。模版標籤是在乙個模版裡起作用的標記。比如,乙個模版標籤可以產生控制結構的內容 if或者for 可以獲取資料庫內容或者訪問其它模版標籤。乙個標籤塊被包圍 變數標籤被 包圍 context是乙個傳遞給模版的key va...