Каким должно быть значение по умолчанию для поля null = False при переносе схемы, которое, я уверен, не будет иметь нулевых значений?

Я хочу добавить в свою модель поле ForeignKey .Для этого я сделал 3 шага:

  1. Добавил поле ForeignKey с null = True в мою модель, а затем создал схему миграции .
  2. Создал перенос данных , чтобы заполнить этот внешний ключ разумным значением. Я почти уверен, что после применения этой миграции в этом поле не осталось объектов со значением NULL.
  3. Изменено поле ForeignKey на null = False , а затем создал еще одну миграцию схемы .

Однако у меня возникли проблемы на шаге 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 в качестве одноразового значения по умолчанию. Это довольно плохое решение, но по крайней мере юг не жалуется на это и создает миграцию.

  • Как правильно изменить поле на NOT NULL ? (используется юг )
  • Что мне делать, когда юг запрашивает у меня значение по умолчанию для поля, в котором его не должно быть?

Я использую ] django-1.2 и south-0.7 .


Связанный вопрос: Django South - преобразование поля null = True в поле null = False

Связанная документация: Часть 3: Расширенные команды и перенос данных

(сноска: здесь, в StackOverflow, у нас есть два тега, которые кажутся мне одинаковыми: «django-south» и «south», но у меня недостаточно репутации, чтобы предлагать синонимы)

17
задан Community 23 May 2017 в 12:00
поделиться