Я хочу добавить поле ForeignKey
в мою модель. Для этого я сделал 3 шага:
- Добавил поле
ForeignKey
с null=True
к моей модели, а затем создал schemamigration
.
- Создано
datamigration
для заполнения этого внешнего ключа разумным значением. После применения этой миграции я почти уверен, что в этом поле не осталось объекта со значением NULL.
- Изменил это поле
ForeignKey
на null=False
, а затем создал другое schemamigration
.
Однако у меня проблемы на шаге 3 :
? The field 'MyModel.fkfield' does not have a default specified, yet is NOT NULL.
? Since you are making this field non-nullable, you MUST specify a default
? value to use for existing rows. Would you like to:
? 1. Quit now, and add a default to the field in models.py
? 2. Specify a one-off value to use for existing columns now
? Please select a choice:
Хорошо ... Никакое значение по умолчанию не имеет смысла для этого поля, и к тому же теперь я почти уверен, что ни у одного объекта нет этого поля как NULL. Итак ... Я не знаю, как правильно ответить на этот вопрос. Если бы я мог, я бы сказал: "Не устанавливайте никакого значения по умолчанию, и выведите ошибку, если вы обнаружите в этом столбце NULL. ».
На данный момент, в качестве обходного пути, чтобы обойти этот вопрос, я выбрал опцию 2
, а затем использовал 1
в качестве единовременного значения по умолчанию. Это довольно плохое решение, но по крайней мере south
не жалуется на это и создает миграцию.
- Как правильно изменить поле на
NOT NULL
? (используя south
)
- Что мне делать, когда
south
запрашивает значение по умолчанию для поля, в котором его не должно быть?
Я использую django-1.2
и south-0.7
.
Смежный вопрос: Джанго Юг - превращение нулевого = истинного поля в нулевое = ложное поле
Сопутствующая документация: Часть 3. Расширенные команды и перенос данных
(сноска: здесь, в StackOverflow, у нас есть два тега, которые мне кажутся одинаковыми: "django-south" и "south", но у меня недостаточно репутации, чтобы предлагать синонимы)