在django中生成灯具

时间:2013-12-21 18:24:33

标签: python django django-south

我有一个可以在队列上生成一些乱码模型实例的应用程序。与静态夹具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。这很快就会变得混乱。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

从项目的README中复制:

  

factory_boy是基于thinkbot的灯具替代品   factory_girl。

     

其功能包括:

     

直观的语法支持多种构建策略   (已保存/未保存的实例,属性dicts,存根对象)功能强大   常见案例的助手(序列,子工厂,反向   依赖,循环工厂,......)每个类多个工厂   支持,包括继承支持各种ORM(目前   Django,Mogo,SQLAlchemy)

答案 2 :(得分:1)

我认为最好的方法是编写简单的自定义脚本来填充数据库。不要为此目的使用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()