Нагрузочные светильники Django South основаны на окружающей среде (разработка, интеграция, производство) - PullRequest
3 голосов
/ 02 февраля 2012

Я работаю над проектом, который использует Django и South для миграции. Я хотел бы установить некоторые приспособления, которые будут использоваться для заполнения базы данных в некоторых средах (разработка, демонстрация), но не в других (производство). Например, я хотел бы, чтобы в системе было несколько данных, чтобы у разработчика UI было что-то, с чем он мог бы работать в интерфейсе, над которым он работает, или чтобы мы могли быстро сделать демонстрацию для менеджера проекта, не настраивая вручную интерфейс администратора.

Несмотря на то, что я нашел множество способов отделить автоматические испытательные приборы от обычных, я не смог найти ничего о загрузке приборов в зависимости от среды. Возможно ли это, или есть другой способ решить эту проблему, которую я пропускаю?

1 Ответ

2 голосов
/ 02 февраля 2012

Мало что можно сделать с 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")
...