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