有些数据表需要硬编码数据,Django 既可以用 migration 实现,也可以用 fixtures 实现。感觉后者更方便些,只要准备一个符合格式的结构化文件即可 jsonyamlxml 几种常用格式都可以。

使用 dumpdata 导出

如果数据库已经写好了数据,可以用 python manage.py dumpdata 命令将其导出。

手写 fixture 文件

在项目应用中新建 fixtures 目录,创建 fixture 文件内容如下:

JSON 格式举例

[
  {
    "model": "myapp.person",
    "pk": 1,
    "fields": {
      "first_name": "John",
      "last_name": "Lennon"
    }
  },
  {
    "model": "myapp.person",
    "pk": 2,
    "fields": {
      "first_name": "Paul",
      "last_name": "McCartney"
    }
  }
]

执行命令

$  python manage.py loaddata <fixturename>

注意:执行 loaddata 命令会复写已经存在数据!

fixtures 文件的查找路径

django 默认会在各个应用中的 fixtures 目录寻找 fixture 文件,可以设置 FIXTURE_DIRS 环境变量指定其他查找路径。

Reference