模型類實例方法
數據表的增、刪、改操作通過模型類實例方法完成
- save():將模型對象保存到數據表中,ORM框架會映射成對應的
insert
或update
語句。 - 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