[英]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.