【发布时间】:2011-09-03 10:21:24
【问题描述】:
我想在我的 Django 项目中创建一个夹具文件。
我该怎么做?
【问题讨论】:
我想在我的 Django 项目中创建一个夹具文件。
我该怎么做?
【问题讨论】:
阅读“Providing initial data for models”。
manage.py dumpdata 将数据转储到 JSON 固定文件中。阅读“django-admin.py and manage.py”。【讨论】:
您必须在您的应用中创建一个名为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/topics/testing/tools/#fixture-loading
【讨论】:
我来到这里寻找如何做固定装置。我发现下面的文章是最简单的。
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)。为什么?
我目前正在编写一个 django 模块 (django-generate_fixtures) 来生成智能装置,遵循一个父对象的每个相关模型。
它现在将数据转储为 JSON,然后您可以像任何其他设备一样加载它。
【讨论】:
如果你想转储整个网站,你不需要在设置中指定一个fixtures dir,你可以在你的项目中创建一个fixtures dir并运行它
python manage.py dumpdata --format=json > /full-path-to-my-project/fixtures/initial_data.json
【讨论】:
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 是可选的。
【讨论】: