在第一次设置应用程序时,使用硬编码数据预先填充数据库有时很有用。您可以为迁移或装置提供初始数据。
要自动加载应用程序的初始数据,请创建 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在 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 帮助建立一致的测试环境。
12月 18, 2023