Я работаю с проектом ОС, который использует South для переноса базы данных.Я создаю новую базу данных с нуля, и я хочу убедиться, что South настроен, чтобы я мог легко обновить базу данных в будущем.
Кажется, этот процесс должен быть:
- создать базу данных
- syncdb
- migrate
Однако, когда я пытаюсь перенести базы данных, происходит одна из ранних миграций (миграция 0004, и они переходят в0009) выдает исключение:
ValueError: You cannot add a null=False column without a default value.
Я не понимаю, как добавить значение по умолчанию для миграции 0004, чтобы это исключение не выдавалось.
Миграциям не нужновыполнить, потому что база данных пуста.
Однако south_migrationhistory должен содержать список всех миграций и когда они были применены.
Я попытался взломать его и простодобавьте миграцию 0009 в базу данных вручную, но это вызвало еще одну ошибку, поскольку промежуточные миграции не были выполнены.Я также попытался добавить поле в базу данных, чтобы посмотреть, смогу ли я понять, как будет выглядеть синтаксис add_column со значением по умолчанию 0.Формат выглядит совершенно иначе, чем у этих более старых миграций.
Вот две разные версии синтаксиса add_column:
#0004 syntax:
db.add_column('experiments_dailyreport', 'test_group_size', orm['experiments.dailyreport:test_group_size'])
#0009 syntax:
syntax db.add_column('experiments_dailyreport', 'test_group_size', self.gf('django.db.models.fields.IntegerField')(default=0), keep_default=False)
Итак, я предполагаю, что в южном коде произошли изменениямежду моментом создания 0004 и сегодняшним днем.
Есть ли способ создать базу данных с помощью syncdb, а затем каким-либо образом обновить south_migrationhistory без запуска manage.py migrate?
Если выу вас есть существующее приложение с миграцией на юг, как бы вы создали новую базу данных с нуля?
Я не могу мигрировать, потому что в целочисленном поле не задано значение по умолчанию.Как установить значение по умолчанию в более старой миграции?Поле даже больше не существует.
Синтаксис попытался:
db.add_column('experiments_dailyreport', 'test_group_size', orm['experiments.dailyreport:test_group_size'], {'default': 0})
#throws ValueError: You cannot add a null=False column without a default value.
db.add_column('experiments_dailyreport', 'test_group_size', self.gf('django.db.models.fields.IntegerField')(default=0), keep_default=False)
#throws AttributeError: Migration instance has no attribute 'gf'
Я использую South-0.7.2-py2.7.egg