基于环境的Django South装载夹具(开发、集成、生产)

基于环境的Django South装载夹具(开发、集成、生产),django,production-environment,fixtures,django-south,Django,Production Environment,Fixtures,Django South,我正在做一个使用Django和South进行迁移的项目。我想设置一些装置,用于在某些环境(开发、演示)中填充数据库,但在其他环境(生产)中不填充数据库。例如,我希望系统中有一些数据,以便UI开发人员可以在他们正在处理的界面中处理一些数据,或者我们可以快速为项目经理进行演示,而无需通过管理界面手动设置 虽然我已经找到了很多方法将自动测试装置与常规装置分开,但我还没有找到任何关于基于环境加载装置的方法。这是可能的,还是有其他方法可以解决我忽略的问题?对于初始数据装置,您无能为力。然而,我一直觉得这些

我正在做一个使用Django和South进行迁移的项目。我想设置一些装置,用于在某些环境(开发、演示)中填充数据库,但在其他环境(生产)中不填充数据库。例如,我希望系统中有一些数据,以便UI开发人员可以在他们正在处理的界面中处理一些数据,或者我们可以快速为项目经理进行演示,而无需通过管理界面手动设置


虽然我已经找到了很多方法将自动测试装置与常规装置分开,但我还没有找到任何关于基于环境加载装置的方法。这是可能的,还是有其他方法可以解决我忽略的问题?

对于
初始数据
装置,您无能为力。然而,我一直觉得这些都没有达到最佳效用。您很少希望在每次调用
syncdb
migrate
时反复应用相同的装置

如果您使用的是不同名称的fixture,您可以通过将以下内容添加到转发迁移中(从中)轻松使其与迁移一起运行

所以,实际上,您所需要的只是在某些环境中实现这一点的某种方法。对于开发人员来说,最简单的方法就是简单地依赖
DEBUG
。因此,前面的代码变成:

from django.conf import settings
from django.core.management import call_command
if settings.DEBUG:
    call_command("loaddata", "dev_fixture.json")
如果您需要更大的控制,您可以创建某种设置,这些设置在每个
本地设置.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")

回答得好!如何处理过时的设备:您是否像对待迁移一样对待它们?因此,如果您的夹具加载迁移为#3,并且在10次迁移后,夹具已过时,那么您是否只需添加一个新迁移,加载一个新夹具,使其成为迁移#14?夹具本质上就是即时快照。如果您的数据库在迁移过程中发生了更改,那么它们很可能无法继续工作。所以,我想说,是的,如果您创建了一个新的迁移,并且需要专门处理该迁移的fixture,那么您只需基于数据库的当前状态创建一个新fixture。
# 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")