【问题标题】:Generating fixtures in django在 django 中生成固定装置
【发布时间】:2014-01-10 09:48:16
【问题描述】:

我有一个可以在队列中生成一些乱码模型实例的应用程序。与拥有静态夹具 initial_data 不同,我希望在迁移期间拥有类似以下内容:

if IS_DEBUG and not IS_TEST:
    (create_post() for _ in xrange(100))
    (create_user() for _ in xrange(100))

我知道如何在 django 中加载静态装置,但我希望更好地控制我加载到我的应用程序中的虚假数据。

请注意 - 这不是用于 unit/func/anything 测试,而是用于填充数据库以便能够浏览网站的开发版本并环顾四周。

完成此任务的最佳方法是什么?自定义南迁?

更新:与南迁移有关的问题,如果我在填充数据的自定义迁移之后更改迁移中的模型 - 会有点混乱。例如:

 0001_initial
 0002_generate_fixtures
 0003_add_field_to_a_model

所以现在我必须删除 0002_generate_fixtures 并创建新的迁移 0004_generate_fixtures。这很快就会变得一团糟。

【问题讨论】:

  • 我为类似的东西写了一个管理命令。我使用 bash 脚本来调用它并填充数据库,但您可以使用 python 或其他任何东西。每次我重新创建开发数据库时,我都会调用我的 bash 脚本。这一切都是自动化的、可跟踪的并且易于更改docs.djangoproject.com/en/dev/howto/custom-management-commands

标签: python django django-south


【解决方案1】:

Serafeim 和 nieka 的回答非常有帮助,最终我决定在 app_name/management/commands/populatedb.py 中使用自定义管理命令。

现在,我可以简单地运行 python manage.py populatedb 来动态填充我的数据库。

【讨论】:

  • @bnjmn,它只是在问了一个问题后才来找我 - 有时会发生。
【解决方案2】:

我已成功使用 factory_boy (https://github.com/rbarrois/factory_boy) 创建自定义夹具(用于测试或仅填充数据库)。

从项目的自述文件中复制:

factory_boy 是基于thoughtbot 的固定装置替代品 factory_girl。

它的特点包括:

简单的语法支持多种构建策略 (已保存/未保存的实例、属性字典、存根对象) 常见情况的助手(序列,子工厂,反向 依赖关系,循环工厂,...)每个类多个工厂 支持,包括继承支持各种ORM(目前 Django、Mogo、SQLAlchemy)

【讨论】:

  • 我可能还没有说得很清楚:我在哪里放置这个数据库人口?迁移?自定义管理命令?运行 python manage.py migrate 时可以在任何地方自动加载它(请参阅上面更新中的 south 问题)?
【解决方案3】:

我认为最好的方法是编写简单的自定义脚本来填充数据库。请勿将 South 用于此目的。

当您想要填充数据库时,只需运行您的自定义脚本:

fill_db.py:

from django.conf import settings

def fill_db()
    if settings.IS_DEBUG and not settings.IS_TEST:
        for i in xrange(100):
            Post.objects.create()
            User.objects.create()

您也可以将此脚本添加到 django 管理命令中:

from django.core.management.base import BaseCommand

class Command(BaseCommand):
    def handle(self, *args, **options):
        fill_db()

【讨论】:

    猜你喜欢
    • 2020-03-08
    • 2011-09-13
    • 2011-04-29
    • 2013-09-02
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多