繁体   English   中英

在Django中生成固定装置

[英]Generating fixtures in django

我有一个可以在队列中生成一些乱码模型实例的应用程序。 相对于使用静态夹具initial_data而言,我希望在迁移过程中具有以下内容:

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

我知道如何在Django中加载静态固定装置,但是我想对我加载到应用程序中的虚假数据有更多的控制权。

只是一个注释-这不是用于单元/功能/任何测试,而是用于填充数据库,以便能够浏览网站的开发版本并环顾四周。

做到这一点的最佳方法是什么? 习俗向南迁移?

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

 0001_initial
 0002_generate_fixtures
 0003_add_field_to_a_model

因此,现在我必须删除0002_generate_fixtures并创建新的迁移0004_generate_fixtures 很快就会变得混乱。

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

现在,我只需运行python manage.py populatedb即可动态填充数据库。

我已经非常成功地使用factory_boy( https://github.com/rbarrois/factory_boy )创建自定义固定装置(用于测试或仅填充数据库)。

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

factory_boy是基于Thoughtbot的factory_girl替代的灯具。

其功能包括:

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

我认为最好的方法是编写简单的自定义脚本来填充数据库。 请勿将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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM