什麼是模型(model)?在你的網頁應用程式中,模型是儲存應用程式的資料。一個模型(model)是單一、決定性的資料(data)來源,模型中包含你想儲存資料的欄位(field)和行為。一般來說,Django中的每個模型將映射至資料庫(database)中的一個表格(table)。
你應該知道的基本觀念:
每一個模型是一個Python的類別,並且是繼承django.db.models.Model的子類別。
模型內的每一個屬性(attribute)是資料庫中資料表的一個欄位。
所有的功能,Django會自動產生一個資料庫存取的API提供你使用。
我們先從一個簡單的範例了解模型的基本觀念,底下的程式碼定義一個名稱為Person的類別,Django中則是一個模型,在Person類別裡包含兩個屬性:first_name和last_name,每個屬性則是代表資料庫中的一個資料欄位。
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
這樣一個模型會經由Django自動產生資料庫的表格,例如底下的SQL語法。
CREATE TABLE myapp_person (
"id" serial NOT NULL PRIMARY KEY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL
);
當我們了解這樣的一個映射關係(類別映射至資料表),技術上有幾項需要注意:
Django會自動產生資料表的名稱,例如myapp_person的資料表(myapp是應用程式名稱),依據模型的中繼資料(metadata)資訊產生名稱,當然,如果不喜歡這樣的自動化,你也有權利可以修改!
每個模型的資料表,一定會有一個id欄位做為主鍵(primary key),Django會自動為你加入到資料表之中,同樣的,你也可以自己指定這樣的id欄位。
上述範例的SQL語法是依據PostgreSQL的資料庫而產生,針對不同的資料庫,Django會依據設定檔而產生特定資料庫的SQL語法。
一但你已經定義好模型,你必須告訴Django你將使用這麼模型。方法是修改設定檔(settings.py)的INSTALLED_APPS參數,例如Django當中mysite專案中有一個myapp應用程式,模型定義於myapp裡面的models.py,則INSTALLED_APPS設定下:
INSTALLED_APPS = (
#...
'mysite.myapp',
#...
)
記得設定好INSTALLED_APPS,請記得執行manage.py syncdb讓Django替你建立資料表。
模型最重要的、必要的部分是資料庫欄位的定義。欄位在模型的類別之中是指定為類別的屬性(attribute)。
例如像這樣:
class Musician(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
instrument = models.CharField(max_length=100)
class Album(models.Model):
artist = models.ForeignKey(Musician)
name = models.CharField(max_length=100)
release_date = models.DateField()
num_stars = models.IntegerField()
Reference: http://docs.djangoproject.com/en/1.3/topics/db/models/