Это стандартное поведение syncdb для запуска initial_data.json каждый раз. Из документов Django:
Если вы создадите прибор с именем initial_data. [Xml / yaml / json], этот прибор будет загружаться каждый раз, когда вы запускаете syncdb. Это чрезвычайно удобно, но будьте осторожны: помните, что данные будут обновляться при каждом запуске syncdb. Поэтому не используйте initial_data для данных, которые вы хотите редактировать.
См .: Документы
Лично я считаю, что сценарий использования исходных данных, который необходимо перезагружать каждый раз, когда происходит изменение, запаздывает, поэтому я никогда не использую initial_data.json.
Лучший способ, поскольку вы используете South, - это вручную вызвать loaddata для определенного устройства, необходимого для вашей миграции. В случае исходных данных это будет происходить при миграции 0001_initial.py.
def forwards(self, orm):
from django.core.management import call_command
call_command("loaddata", "my_fixture.json")
См .: http://south.aeracode.org/docs/fixtures.html
Также помните, что путь к вашему устройству относительно корня проекта. Итак, если ваш прибор находится в "myproject / myapp / fixtures / my_fixture.json" call_command
будет выглядеть так:
call_command('loaddata', 'myapp/fixtures/my_fixture.json')
И, конечно, ваш прибор не может быть назван 'initial_data.json', в противном случае поведение по умолчанию вступит во владение.