亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2019年07月22日 11:30:49   作者:笑-笑-生  
這篇文章主要介紹了Django框架自定義模型管理器與元選項用法,結合實例形式分析了自定義模型管理器與元選項的功能、用法及相關操作注意事項,需要的朋友可以參考下

本文實例講述了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年之后成立的部門

管理器類中添加額外的方法,幫我們操作模型類對應的數據表

需求: 在管理器類中,定義一個創(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()

三、在視圖函數中,使用自定義的模型管理器中的方法

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程序設計有所幫助。

相關文章

最新評論