2016-05-11 3 views
0

Я использую Django 1.6 в качестве banckend, и я использую Юг для миграции. У меня есть две таблицы, Content и Channel, я добавил поле adress в Channel:Django и юг миграции: неожиданное поле вышло

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, потому что я хочу, чтобы он был пустым по умолчанию, как я могу это решить? Благодаря!

+0

Вы удалили поле 'adress' из' Content' модели? –

+0

Да, я так думаю @ ShangWang –

+0

Итак, я удалил поле с именем 'adress', как я могу с этим справиться? Спасибо –

ответ

2

Сообщение в основном говорят: Вы имели поле, называемое adress в модели Content раньше, и это не может быть пустым, если вы определили его (вы не null=True на этом поле). Когда вы удаляете его, юг должен знать, какое значение вы хотите заполнить, когда вы восстановите поле, если вы хотите изменить миграцию.

Если вы понимаете на юг, у него есть методы forward и backward, чтобы применить и вернуть изменения соответственно. Если вы хотите отменить миграцию, ваши данные для поля adress на модели Content не могут быть восстановлены. Но вы уже сделали его недействительным, юг должен заполнить какое-то значение, а значит, и быстрое сообщение.

Решение зависит от ваших потребностей. Если вы не беспокоитесь о восстановлении значений для этого поля, выберите 3, было бы в порядке, потому что вы никогда не будете выполнять обратную миграцию. Или выберите 2, но он не лучше, чем 3, просто заполните значение по умолчанию для всех записей, что, скорее всего, не то, что вы хотите.

+0

Я вижу ... спасибо, есть некоторые причины, почему я могу удалить поле 'адрес 'в таблице' Content'? –

+0

Извините, я не понимаю ваш вопрос. Можете ли вы немного разобраться? –

Смежные вопросы