Подтвердить что ты не робот

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

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

  • Добавлено поле ForeignKey с null=True в мою модель, а затем создало schemamigration.
  • Создал datamigration, чтобы заполнить этот внешний ключ разумным значением. После применения этой миграции я уверен, что в этом поле нет объекта с нулевым значением.
  • Изменено это поле 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.


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

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

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

4b9b3361

Ответ 1

Просто мысль: поскольку это внешний ключ, вы можете установить значение по умолчанию для записи, которая, как вы знаете, никогда не будет иметь ссылку на запись, т.е. 0 или -1. Ваш дБ вызовет ошибку, если юг фактически попытается использовать это значение по умолчанию.