2013-03-26 3 views
1

Я понятия не имею, что Django пытается мне сказать. У меня есть модель, WeekTwo, которая наследует от Week, которая наследуется от modelsModel. У меня есть другая модель, UserProfile. Я хочу использовать WeekTwo как ключ OneToOne в UserProfile, поэтому я вставил следующую строку кода:В поле не указано значение по умолчанию, но NOT NULL

weekTwo = models.OneToOneField(WeekTwo) 

Однако, когда я пытаюсь перенести свою базу данных с помощью python manage.py schemamigration my_app --auto, я получаю следующее сообщение об ошибке:

The field 'UserProfile.weekTwo' does not have a default specified, yet is NOT NULL. 

Я попытался добавить default=0 к моей weekTwo декларации, но теперь я получаю эту ошибку, когда я пытаюсь миграция схемы:

IntegrityError: column weekTwo_id is not unique 

Кроме того, юг теперь говорит мне, что я в interim state between migrations и что я might be able to recover. Я буквально понятия не имею, что это значит.

+0

Вы читали документы? :) http://south.readthedocs.org/ru/latest/tutorial/part2.html – favoretti

+0

Первоначально вам сообщалось, что, поскольку ваше новое поле было обязательным, все ваши существующие строки в таблице необходимо будет обновить. Если вы перенесли миграцию, она попросила бы ввести значение по умолчанию. Если вы еще не перенести, вы сможете удалить две миграции и начать снова –

ответ

3

Имейте в виду, прежде чем идти дальше, убедитесь, что если юг уже выполнил любую миграцию, которая была провалена, лучше повторить восстановление до последнего migration, который работал.

У вас есть два варианта: сначала вы можете сделать Data Migration. Посмотрите также на ref.

В Второй способ можно сделать weekTwo поле null и blank первый

weekTwo = models.OneToOneField(WeekTwo, null=True, blank=True) 

Тогда пусть Юг генерировать миграции для вас

python manage.py schemamigration my_app --auto 

Я уверен, что Юг не будет жаловаться в настоящее время, затем

python manage.py migrate 

Если e verything нормально сейчас, теперь вы можете вернуться и изменить к weekTwo поле

weekTwo = models.OneToOneField(WeekTwo) 

И generate миграции затем migrate их.

Во всяком случае, когда юг узнать ваше поле не NULL и не имеет значения default, на schemamigration шаге предложит вам указать значение для него, снова здесь ваше поле OneToOneField, потому что даже на юг дает вы можете указать значение по умолчанию для вашей существующей записи на модели, снова уникальность поля weekTwo приведет к ошибке.

Я думаю, что все-таки вы должны пойти с миграции данных если второй способ не работает, или дает ему шанс и попробовать второй путь на этот раз вместо того, чтобы сделать его null, blank изменить весь Field тип. Попробуйте это;

weekTwo = models.ForeignKey(WeekTwo) 

Но имейте в виду миграции данных будет определенно умнее и стандартным способом здесь.

+0

Hm, прошел эти шаги, но я все равно получаю ту же ошибку, как только я выберу null = True и blank = True. – user1427661

+0

@ user1427661 только что обновил ответ;) –

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