如何创建夹具文件

Posted

技术标签:

【中文标题】如何创建夹具文件【英文标题】:How to create a fixture file 【发布时间】:2011-09-03 10:21:24 【问题描述】:

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

我该怎么做?

【问题讨论】:

【参考方案1】:

阅读“Providing initial data for models”。

    将一些数据加载到 Django 管理的数据库中。简单的 Python 脚本可以很好地工作,或者使用默认的管理界面。 使用manage.py dumpdata 将数据转储到 JSON 固定文件中。阅读“django-admin.py and manage.py”。

【讨论】:

链接文档时,最好链接到 [dev]("docs.djangoproject.com/en/dev/ref/django-admin/…) 版本? 您提供的链接已失效,这是一个新链接:TestCase.fixtures【参考方案2】:

您必须在您的应用中创建一个名为fixtures 的目录,并将您的fixtures 文件放在那里。

您可以用 json 或 xml 编写它们,制作它们的一种简单方法是在管理界面中创建一些对象,然后运行 ​​manage.py dumpdata。这会将您创建的对象中的数据转储到夹具文件中。之后,您可以简单地编辑这些文件以满足您的需要。

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

如果你想加载你使用manage.py loaddata的fixture。

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

您可以使用带有初始数据的设备,这些数据会在您运行 syncdb 时自动加载,只需创建一个名为 initial_data 的文件,Django 就会识别它。

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

要将夹具用于测试目的,您必须在测试类中声明它们

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

【讨论】:

【参考方案3】:

我来到这里寻找如何做固定装置。我发现下面的文章是最简单的。

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 

【讨论】:

另外值得注意的是,您可以通过使用小写路径选择性地转储模型。您还可以通过python -mjson.tool - python manage.py dumpdata myapp.mymodel | python -mjson.tool > mymodel.json 进行漂亮的打印。 运行dumpdata 命令时出现错误。 unbound method contribute_to_class() must be called with TextField instance as first argument (got ModelBase instance instead)。为什么? @Hussain 模型有效吗?见code.djangoproject.com/wiki/NewbieMistakes#Symptom5【参考方案4】:

我目前正在编写一个 django 模块 (django-generate_fixtures) 来生成智能装置,遵循一个父对象的每个相关模型。

它现在将数据转储为 JSON,然后您可以像任何其他设备一样加载它。

【讨论】:

【参考方案5】:

如果你想转储整个网站,你不需要在设置中指定一个fixtures dir,你可以在你的项目中创建一个fixtures dir并运行它

python manage.py dumpdata --format=json > /full-path-to-my-project/fixtures/initial_data.json

【讨论】:

【参考方案6】:

转储数据:

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

加载数据:

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

--缩进 X 是可选的。

【讨论】:

--indent 确实是可选的,但如果您想要可以检查到 git 并具有实际可读差异的修复,这是一个非常好的主意。没有它,夹具都以一条线结束! 确实如此。虽然对于大型灯具,您可以选择节省空间。对于主数据,最好有缩进的夹具。

以上是关于如何创建夹具文件的主要内容,如果未能解决你的问题,请参考以下文章

如何为多对多关系创建 initial_data Json 夹具?

包含图像、文件和标签的模型的夹具数据

RobotStudio Smart组件创建动态夹具

如何从范围=会话的pytest夹具返回多个值

Django - 夹具中的外键

如何更改 dumpdata 命令输出夹具中权限字段的格式?