如何為模型提供初始資料

在首次設定應用程式時,使用硬編碼資料預先填充資料庫有時很有用。您可以使用遷移或固件提供初始資料。

使用遷移提供初始資料

若要自動載入應用程式的初始資料,請建立資料遷移。設定測試資料庫時會執行遷移,因此資料將在那裡可用,但需遵守一些限制

使用固件提供資料

您也可以使用固件提供資料,但是,除了使用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 指令中區分它們。避免此問題最簡單的方法是您的固件檔案加上命名空間。也就是說,將它們放在以其應用程式命名的目錄中,如上面的相對路徑範例所示。

另請參閱

固件也由測試框架使用,以協助設定一致的測試環境。

返回頂端