91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-26 10:56:59 來源:腳本之家 閱讀:146 作者:笑-笑-生 欄目:開發技術

本文實例講述了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"

重新生成遷移文件,并遷移生成表,查看表名是否有修改

二、修改模型類在管理后臺的顯示名稱

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

class Meta:
  # 定義表名
  db_table = 'department'
  # 定義在管理后臺顯示的名稱
  verbose_name = '部門'
  # 指定復數時的名稱(去除復數的s)
  verbose_name_plural = verbose_name

希望本文所述對大家基于Django框架的Python程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

盐池县| 廊坊市| 西青区| 汉沽区| 玛纳斯县| 潼南县| 司法| 丽江市| 高淳县| 亚东县| 诸城市| 盱眙县| 连州市| 阳东县| 云阳县| 灌阳县| 麻栗坡县| 顺平县| 通许县| 乌恰县| 屯留县| 大洼县| 镶黄旗| 镇宁| 梓潼县| 云霄县| 容城县| 张家界市| 浦江县| 盐津县| 锡林郭勒盟| 大冶市| 七台河市| 定西市| 鱼台县| 海伦市| 雅安市| 巨鹿县| 柳州市| 娄烦县| 澄江县|