您好,登錄后才能下訂單哦!
本文實例講述了Django框架自定義模型管理器與元選項用法。分享給大家供大家參考,具體如下:
自定義模型管理器
每個模型類默認都有一個 objects 類屬性,可以把它叫 模型管理器。它由django自動生成,類型為
django.db.models.manager.Manager
可以在模型類中自定義模型管理器,自定義后, Django將不再生成默認的 objects。(模型類可以自定義多個管理器)
例如:
class Department(models.Model): # 自定義模型管理器 manager = models.Manager()
調用 Department.objects會拋出AttributeError異常,而 Department.manager.all()會返回一個包含所有Department對象的列表。
兩種情況需要自定義管理器
修改管理器返回的原始查詢集
需求: 調用 Department.manager.all()
返回的是2009年之后成立的部門
管理器類中添加額外的方法,幫我們操作模型類對應的數據表
需求: 在管理器類中,定義一個創建部門的方法
一、自定義模型管理器
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()
三、在視圖函數中,使用自定義的模型管理器中的方法
def add_dep(request): """新增部門""" # d = Department() # d.name = '財務部' # d.create_date = date(2018, 1, 1) # d.save() # 調用自定義的模型管理器,新增一個部門 Department.objects.create_dep('財務部', date(2018, 1, 1)) # 返回的不再是所有的部門,而是2009年之后成立的部門 # 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框架的Python程序設計有所幫助。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。