如何创建夹具文件
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 并具有实际可读差异的修复,这是一个非常好的主意。没有它,夹具都以一条线结束! 确实如此。虽然对于大型灯具,您可以选择节省空间。对于主数据,最好有缩进的夹具。以上是关于如何创建夹具文件的主要内容,如果未能解决你的问题,请参考以下文章