Django South如何根据环境(开发、集成、生产)加载固定数据?

3
我正在处理一个使用Django和South进行迁移的项目。我想设置一些fixture,以便在某些环境(开发,演示)中用于填充数据库,但在其他环境(生产)中不需要使用。例如,我希望系统中有一些数据,以便UI开发人员在他们正在开发的界面上工作或者我们可以很快地为项目经理进行演示而不需要通过管理界面手动设置。
虽然我发现了许多将自动化测试fixture与常规fixture分离的方法,但我没有找到任何关于基于环境加载fixture的信息。这是否可行,或者还有其他方法可以解决我忽略的问题?
1个回答

2

关于initial_data数据,你没有太多的选择。然而,我一直觉得这些数据的实用性不是很好。很少有人希望在每次调用syncdbmigrate时都应用相同的数据。

如果你使用了其他名称的数据,你可以通过将以下内容添加到正向迁移中(来自South文档)轻松地使其与迁移一起运行。

from django.core.management import call_command
call_command("loaddata", "my_fixture.json")

因此,你需要一些方法只在某些环境下执行。对于开发环境而言,最简单的方法就是依赖于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")

很棒的回答!你如何处理过时的固定数据:你是否像处理迁移一样对待它们?因此,如果您的固定数据加载迁移是#3,并且在进行了10次迁移后,该固定数据已过时,那么您是否只需添加一个新的迁移,加载一个新的固定数据,使其成为第14个迁移? - jawilmont
测试数据是固有的瞬时快照。如果您的数据库从迁移中发生更改,它们很可能无法正常工作。因此,我会说,是的,如果您创建了一个新的迁移并需要处理特定于该迁移的测试数据,那么您应该基于当前数据库状态创建一个新的测试数据。 - Chris Pratt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接