我正在开发一个使用Django和South进行迁移的项目。我想设置一些固件,用于在某些环境(开发,演示)中填充数据库,但不在其他环境(生产)中。例如,我希望系统中有一些数据,以便UI开发人员可以在他们正在使用的界面中使用,或者我们可以快速为项目经理进行演示而无需通过手动设置管理界面。
虽然我找到了很多方法将自动化测试夹具与常规夹具分开,但我还是找不到任何基于环境加载夹具的方法。这是可能的,还是有其他人解决这个问题的方法我忽略了?
答案 0 :(得分:2)
关于initial_data
灯具你无能为力。但是,我一直觉得那些效用还不够理想。您很少希望每次拨打syncdb
或migrate
时反复应用相同的灯具。
如果您使用了一些不同名称的灯具,您可以通过在转发迁移中添加以下内容(来自South docs)
,轻松地使其与您的迁移一起运行from django.core.management import call_command
call_command("loaddata", "my_fixture.json")
所以,你需要的只是某种方式,只能在某些环境中这样做。对于dev,最简单的方法就是简单地依赖DEBUG
。因此,之前的代码变为:
from django.conf import settings
from django.core.management import call_command
if settings.DEBUG:
call_command("loaddata", "dev_fixture.json")
如果您需要更好的控制,您可以创建某种设置,每种local_settings.py
(或您根据环境自定义设置所使用的任何方法)都会有所不同。例如:
# local_settings.py
ENV = 'staging'
# migration
from django.conf import settings
from django.core.management import call_command
if settings.ENV == 'staging':
call_command("loaddata", "staging_fixture.json")