如何為模型提供初始資料¶
在首次設定應用程式時,使用硬編碼資料預先填充資料庫有時很有用。您可以使用遷移或固件提供初始資料。
使用遷移提供初始資料¶
使用固件提供資料¶
您也可以使用固件提供資料,但是,除了使用TransactionTestCase.fixtures
的情況外,此資料不會自動載入。
固件是 Django 知道如何匯入資料庫的資料集合。如果您已經有一些資料,建立固件最直接的方法是使用manage.py dumpdata
指令。或者,您可以手動編寫固件;固件可以寫成 JSON、XML 或 YAML (安裝PyYAML)。序列化文件有更多關於每個支援的序列化格式的詳細資訊。
舉例來說,以下是 JSON 中 Person
模型的固件範例
[
{
"model": "myapp.person",
"pk": 1,
"fields": {
"first_name": "John",
"last_name": "Lennon"
}
},
{
"model": "myapp.person",
"pk": 2,
"fields": {
"first_name": "Paul",
"last_name": "McCartney"
}
}
]
以下是以 YAML 格式呈現的相同固件
- model: myapp.person
pk: 1
fields:
first_name: John
last_name: Lennon
- model: myapp.person
pk: 2
fields:
first_name: Paul
last_name: McCartney
您將把此資料儲存在應用程式內的 fixtures
目錄中。
您可以透過呼叫 manage.py loaddata
<固件名稱>
來載入資料,其中 <固件名稱>
是您建立的固件檔案名稱。每次執行 loaddata
時,都會從固件讀取資料並重新載入到資料庫中。請注意,這表示如果您變更固件建立的其中一個資料列,然後再次執行 loaddata
,您將清除您所做的任何變更。
告訴 Django 在哪裡尋找固件檔案¶
預設情況下,Django 會在每個應用程式內的 fixtures
目錄中尋找固件,因此指令 loaddata sample
將找到檔案 my_app/fixtures/sample.json
。這也適用於相對路徑,因此 loaddata my_app/sample
將找到檔案 my_app/fixtures/my_app/sample.json
。
Django 也會在 FIXTURE_DIRS
設定中提供的目錄清單中尋找固件。
若要完全阻止預設搜尋發生,請使用絕對路徑來指定固件檔案的位置,例如 loaddata /path/to/sample
。
為您的固件檔案加上命名空間
Django 將使用它找到的第一個名稱符合的固件檔案,因此如果不同應用程式中有名稱相同的固件檔案,您將無法在 loaddata
指令中區分它們。避免此問題最簡單的方法是為您的固件檔案加上命名空間。也就是說,將它們放在以其應用程式命名的目錄中,如上面的相對路徑範例所示。
另請參閱
固件也由測試框架使用,以協助設定一致的測試環境。