Джанго и миграция на юг: неожиданное поле вышло

Я использую 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Просто введите значение по умолчанию для всех записей, что, скорее всего, не то, что вы хотите.

Другие вопросы по тегам