如何创建一个测试数据文件

93

我想在我的Django项目中创建一个fixture文件。

我该如何操作?

6个回答

95

转储数据:

python manage.py dumpdata app.model_name --indent 4 > fixtures/model_name.json

加载数据:

python manage.py loaddata fixtures/model_name.json --app app.model_name

--缩进X是可选的。


3
“--indent”确实是可选的,但如果你想要将固定数据(fixture)上传到git并且希望在检查diffs时能够方便阅读,那么使用缩进是一个非常好的主意。如果没有缩进,那么整个fixture将会被压缩成一行! - Agrajag
这是正确的。虽然对于大型装置,您可以选择节省空间。对于主数据,最好使用缩进的装置。 - Jay Modi

76

请阅读“为模型提供初始数据”。

  1. 将一些数据加载到Django管理的数据库中。简单的Python脚本非常适用,或使用默认的管理界面。
  2. 使用manage.py dumpdata将数据转储到JSON fixture文件中。请参阅“django-admin.py和manage.py”。

2
在链接文档时,最好链接到[dev](“https://docs.djangoproject.com/en/dev/ref/django-admin/#dumpdata-appname-appname-appname-model”)版本吗? - codervince
4
您提供的链接已失效,请使用新链接:TestCase.fixtures - Dan

21

你需要在应用程序中创建一个名为fixtures的目录,并将你的fixtures文件放在其中。

你可以将它们写成json或xml格式,最简单的方法是在管理界面上创建一些对象,然后运行 manage.py dumpdata 命令。这将把你创建的对象的数据转储到fixture文件中。然后,你可以简单地编辑这些文件以适应你的需求。

https://docs.djangoproject.com/en/1.7/ref/django-admin/#dumpdata-app-label-app-label-app-label-model

如果你想要加载fixtures文件,可以使用 manage.py loaddata 命令。

https://docs.djangoproject.com/en/1.7/ref/django-admin/#loaddata-fixture-fixture

你可以拥有带有初始数据的fixtures文件,当你运行 syncdb 时它们会自动加载,只需要创建一个名为initial_data的文件,Django就会识别它。

https://docs.djangoproject.com/en/1.7/howto/initial-data/#automatically-loading-initial-data-fixtures

要将fixtures文件用于测试目的,你必须在你的测试类中声明它们。

https://docs.djangoproject.com/en/1.7/topics/testing/tools/#fixture-loading


15

我来到这里是为了了解如何进行固定装置,我发现以下文章是最容易理解的。

https://code.djangoproject.com/wiki/Fixtures

FIXTURE_DIRS路径添加到您的应用程序的settings.py中。

import os
PROJECT_DIR = os.path.abspath(os.path.dirname(__file__))
FIXTURE_DIRS = (
   os.path.join(PROJECT_DIR, 'fixtures'),
)

现在将您当前的myapp状态转储到JSON文件中。

python manage.py dumpdata --format=json myapp > myapp/fixtures/initial_data.json

就是这样,时间到了,需要进行测试。删除 myapp 表格...

./manage.py sqlclear myapp | ./manage.py dbshell

现在重新加载固定装置...

./manage.py syncdb 

6
值得注意的是,你可以通过使用小写路径来有选择性地卸载模型。你还可以通过使用管道符和 python -mjson.tool 命令来美化输出结果 - python manage.py dumpdata myapp.mymodel | python -mjson.tool > mymodel.json - Rebs
当我运行dumpdata命令时,出现了错误。为什么会出现“未绑定的方法contribute_to_class()必须使用TextField实例作为第一个参数(而不是ModelBase实例)”的错误提示? - Hussain
@Hussain 模型是否有效?请参见 https://code.djangoproject.com/wiki/NewbieMistakes#Symptom5 - cevaris

5
如果您想转储整个站点,无需在设置中指定fixtures目录,您可以在项目中创建fixtures目录并运行以下命令。
python manage.py dumpdata --format=json > /full-path-to-my-project/fixtures/initial_data.json

4

我目前正在编写一个Django模块(django-generate_fixtures),用于生成智能夹具,跟随一个父对象的每个相关模型。

它目前将数据转储为JSON,然后您可以像加载任何其他夹具一样加载它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接