如何在模型中提供初始数据¶
在首次设置应用程序时,预先填充数据库中硬编码的数据有时很有用。您可以使用迁移或固定装置提供初始数据。
使用迁移提供初始数据¶
使用固定装置提供数据¶
您也可以使用固定装置提供数据,但是,除非您使用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
命令中区分它们。避免此问题的最简单方法是_命名_您的固定装置文件。也就是说,将它们放在以其应用程序命名的目录中,如上面的相对路径示例所示。
另请参阅
固定装置也由测试框架用于帮助设置一致的测试环境。