如何在模型中提供初始数据

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

使用迁移提供初始数据

要自动加载应用程序的初始数据,请创建一个数据迁移。在设置测试数据库时运行迁移,因此数据将在那里可用,但会受到某些限制

使用固定装置提供数据

您也可以使用固定装置提供数据,但是,除非您使用TransactionTestCase.fixtures,否则不会自动加载此数据。

固定装置是 Django 知道如何导入到数据库中的数据集合。如果您已经拥有了一些数据,则创建固定装置最直接的方法是使用manage.py dumpdata命令。或者,您可以手动编写固定装置;固定装置可以编写为 JSON、XML 或 YAML(安装了PyYAML)文档。序列化文档包含有关这些受支持的序列化格式的更多详细信息。

但是,作为一个示例,以下是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命令中区分它们。避免此问题的最简单方法是_命名_您的固定装置文件。也就是说,将它们放在以其应用程序命名的目录中,如上面的相对路径示例所示。

另请参阅

固定装置也由测试框架用于帮助设置一致的测试环境。

返回顶部