Django框架自定義模型管理器與元選項用法分析

2022-10-04 16:45:18 字數 2106 閱讀 7297

自定義模型管理器

每個模型類預設都有乙個 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...