Models
Model 用 Python 類別描述資料庫的表格結構:每個類別對應一張表,每個類別屬性對應一個欄位。Django 的 ORM(Object-Relational Mapper) 讓你用寫 Python 的方式操作資料庫,不用手寫 SQL,同時支援 SQLite、PostgreSQL、MySQL 等多種資料庫,切換資料庫時 Model 程式碼幾乎不用改。
官方文件:Models、Model field reference、Making Queries。
定義 Model
# models.py
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
每個欄位都要指定 field 型別(例如 CharField、IntegerField、DateTimeField、ForeignKey),Django 會依型別決定資料庫欄位的實際型態,以及提供對應的驗證規則(例如 CharField 必須指定 max_length)。
建立資料庫表格(Migrations)
Model 寫好後,資料庫裡實際上還沒有對應的表格,需要透過遷移(migration)機制同步:
- 確認 App 已加入
settings.py的INSTALLED_APPS(見 入門設定)。 -
產生遷移檔,Django 會比對 Model 與資料庫現況,計算出需要哪些 SQL 異動:
-
套用遷移,實際建立或修改資料庫表格:
每次修改 Model(新增欄位、改型別等)都要重新跑一次 makemigrations + migrate,這也是 Django 版本控制資料庫結構變化的方式,遷移檔案本身會存進版本控制系統。
用 Shell 操作資料
Django 提供互動式 shell,已經先幫你載入專案設定,方便直接測試 ORM 語法:
>>> from myapp.models import Person
>>> Person.objects.create(first_name="Ada", last_name="Lovelace")
>>> Person.objects.filter(first_name="Ada")
>>> Person.objects.all()
objects 是 Django 自動加上的管理器(Manager),.filter()、.get()、.all()、.order_by() 等是最常用的查詢方法,串接使用可以組出複雜的查詢條件。
用 Django Admin 管理資料
比起每次都開 shell 操作,更常見的作法是透過內建的後台介面管理資料,細節見 Django Admin。要登入後台,得先有管理員帳號:
並在 admin.py 中註冊 Model,後台才會顯示這張表:
# admin.py
from django.contrib import admin
from myapp.models import Person
admin.site.register(Person)
設定完成、啟動伺服器後,即可用剛才建立的帳號密碼登入 http://127.0.0.1:8000/admin 進行新增、修改、刪除資料。
下一步
有了資料模型後,接著看如何讓使用者透過表單新增或修改資料:表單與驗證;或直接用內建的 Class-Based Views 快速做出資料的 CRUD 介面。