Джанго и миграция на юг: неожиданное поле вышло
Я использую Django 1.6 в качестве банка и использую Юг для миграции. У меня есть две таблицы, Content
а также Channel
Я добавил поле adress
в Channel
:
class Channel(models.Model):
name = models.CharField(max_length=256)
adress = models.CharField(max_length=256,null=True)
и я добавил ForeignKey
в таблице Content
:
class Content(models.Model):
name = models.CharField(max_length=256)
channel = models.ForeignKey(Channel, null=True, blank=True)
Когда я запускаю команду:
python manage.py schemamigration myapp --auto
Я получил это:
+ Added field adress on myapp.Channel
? The field 'Content.adress' does not have a default specified, yet is NOT NULL.
? Since you are removing this field, you MUST specify a default
? value to use for existing rows. Would you like to:
? 1. Quit now.
? 2. Specify a one-off value to use for existing columns now
? 3. Disable the backwards migration by raising an exception; you can edit the migration to fix it later
? Please select a choice: Connection to v-atm-t3v closed by remote host.
Почему у меня есть поле Content.adress
? Я отметил ForeignKey
как null=True,blank=True
потому что я хочу, чтобы он был пустым по умолчанию, как я могу решить это? Спасибо!
1 ответ
Сообщение в основном говорит: у вас было поле с именем adress
в модели Content
раньше, и он не может быть нулевым, когда вы его определили (у вас нет null=True
на этом поле). Когда вы удаляете его, юг должен знать, какое значение вы хотите заполнить при восстановлении поля, если вы хотите отменить миграцию.
Если вы понимаете юг, он имеет forward
а также backward
методы, чтобы применить и отменить изменения соответственно. Когда вы хотите отменить миграцию, ваши данные для поля adress
на модели Content
не может быть восстановлено. Но вы уже сделали это не обнуляемым, юг должен заполнить некоторое значение, отсюда и быстрое сообщение.
Решение зависит от ваших потребностей. Если вам не нужно восстанавливать значения для этого поля, выберите 3
было бы хорошо, потому что вы никогда не запустите обратную миграцию. Или выбрать 2
но это не лучше, чем 3
Просто введите значение по умолчанию для всех записей, что, скорее всего, не то, что вы хотите.