第七章、模型詳解 -- 增刪改操作

模型類實例方法

數據表的增、刪、改操作通過模型類實例方法完成

  • save():將模型對象保存到數據表中,ORM框架會映射成對應的insertupdate語句。
  • delete():將模型對象從數據表中刪除,ORM框架會映射成對應的delete語句。

實例演練: 將‘天龍八部’插入到圖書表中
修改urls.py文件,增加一條路由:url('cure', views.cure),
修改views.py文件,增加cure()函數

  • app_bookinfo表中插入記錄

 

def cure(request):
    b = BookInfo()  # 創建圖類對象

    b.btitle = '天龍八部'  # 添加屬性值a
    b.bpub_date = date(1990, 10, 11)

    b.save()  # 映射成insert語句

    return HttpResponse('執行結束')

  • 將紅樓夢的發行時間修改爲1987-08-15

 

def cure(request):
    b = BookInfo.objects.get(btitle='紅樓夢')
    b.bpub_date = '1987-08-15'

    b.save()  # 映射成update語句

    return HttpResponse('執行結束')

  • 將郭靖添加到天龍八部中

 

def cure(request):
    p = PersonInfo()
    p.pname = '郭靖'
    p.pgender = False
    p.pcomment = '降龍十八掌'

    b2 = BookInfo.objects.get(btitle='天龍八部')
    p.hbook = b2  # 外鍵賦值,指定人物對象的所屬圖書

    p.save()

    return HttpResponse('執行結束')

  • 刪除人名爲公孫勝的記錄

 

def cure(request):
    p = PersonInfo.objects.get(pname='公孫勝')
    p.delete()

    return HttpResponse('執行結束')

管理器(Manager)

管理器是Django模型進行數據庫操作的接口,Django應用的每個模型類都擁有至少一個管理器
Django通過繼承models.Manager類,來自定義管理器

自定義管理器類主要用於兩種情況:

  • 修改原始查詢集,重寫all()方法
  • 向管理器類中添加額外的方法,如向數據庫中插入數據。

修改原始查詢集,重寫all()方法

實例演練: 默認查詢未刪除的圖書信息

a) 修改models.py文件,定義管理器類BookInfoManager

 

class BookInfoManager(models.Manager):
    def all(self):
        return super().all().filter(isDelete=False)

b) 在模型類BookInfo中定義管理器對象

 

class BookInfo(models.Model):
    bookm = BookInfoManager()  # 管理器對象
    ...

c) 修改views.py文件,使用管理器對象bookm調用all()方法(如果再使用objects將出錯)

 

def index(request):
    b = BookInfo.bookm.get(id=1)
    ...

 

  三國演義

向管理器類添加額外的方法

對模型類的數據表進行操作時,推薦將這些操作方法封裝起來,放到模型管理器類中

實例演練: 添加創建圖書類對象的方法

a)修改models.py文件中的管理類BookInfoManager,增加方法create_book(),通過參數傳遞對象屬性

 

class BookInfoManager(models.Manager):
    def create_book(self, title, pub_date):
        book = self.model()  # 使用self.model獲得模型類對象

        book.btitle = title
        book.bpub_date = pub_date
        book.bread = 0
        book.bcommet = 0
        book.isDelete = False

        book.save()  # 將數據插入進數據表

        return book  # 返回創建的對象

b) 在模型類BookInfo中定義管理器對象

 

class BookInfo(models.Model):
    bookm = BookInfoManager()  # 管理器對象
    ...

c) 修改views.py文件,使用管理器對象bookm調用create_book()方法

 

def index(request):
    BookInfo.bookm.create_book("Python", date(2019, 1, 1))
    ...

模型類的屬性

objects屬性:是models.Manager類型的對象,是用於與數據庫進行交互的管理器。

當模型類沒有定義管理器時,Django會自動生成一個名爲objects的管理器
自定義管理器後,Django不再生成默認的objects管理器

元選項

在模型類中定義類Meta,用於設置元信息

實例演練: 自定義數據庫中自動生成的數據表名

  • 數據表的默認名稱爲:<app_name>_<model_name>,例如:app_bookinfo
  • 在模型類BookInfo中,使用元選項db_table將數據表名定義爲bookinfo

 

class BookInfo(models.Model):
    ...   
    class Meta:  # 定義元選項
      db_table='bookinfo'  # 指定BookInfo生成的數據表名爲bookinfo

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章