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

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

我该怎么做?

【问题讨论】:

    标签: django fixtures


    【解决方案1】:

    阅读“Providing initial data for models”。

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

    【讨论】:

    【解决方案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)。为什么?
      【解决方案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 并具有实际可读差异的修复,这是一个非常好的主意。没有它,夹具都以一条线结束!
          • 确实如此。虽然对于大型灯具,您可以选择节省空间。对于主数据,最好有缩进的夹具。
          猜你喜欢
          • 1970-01-01
          • 2013-08-23
          • 2020-09-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多