如何为模型提供初始数据

在第一次设置应用程序时,使用硬编码数据预先填充数据库有时很有用。您可以为迁移或装置提供初始数据。

为迁移提供初始数据

要自动加载应用程序的初始数据,请创建 data migration 。迁移是在设置测试数据库时运行的,因此数据将在那里可用,受以下条件的限制 some limitations

使用固定装置提供数据

您还可以使用以下工具提供数据 fixtures 但是,此数据不会自动加载,除非您使用 TransactionTestCase.fixtures

夹具是Django知道如何导入数据库的数据集合。如果已经有了一些数据,那么创建fixture的最简单方法是使用 manage.py dumpdata 命令。或者,您可以手工编写fixture;fixture可以编写为json、xml或yaml(使用 PyYAML 安装)文件。这个 serialization documentation 对每个支持的 serialization formats .

作为一个例子,这里有一个 Person 模型在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"
    }
  }
]

这是和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 <fixturename> ,在哪里 <fixturename> 是您创建的装置文件的名称。每次你跑步的时候 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 命令。避免此问题的最简单方法是 namespacing 你的夹具文件。也就是说,将它们放在以其应用程序命名的目录中,如上面的相对路径示例所示。

参见

固定装置也由 testing framework 帮助建立一致的测试环境。