2016-07-28 4 views
2

Say У меня есть эти миграции:Джанго: "колонна <whatever> не существует" во время выполнения миграции данных

  • 0001_initial
  • 0002_add_some_column
  • 0003_some_data_migration

Все отлично в этот момент, но если я добавлю еще одну миграцию схемы:

  • 0004_add_ бар _column

, а затем попытаться запустить миграцию против новой БД, или любой БД, которая не имеет 0003 все же, 0003 будет Bork, потому что «колонка бар не существует» ,

Каков правильный способ справиться с этим сценарием? Нужно ли переделывать миграцию данных, когда миграция схемы добавляется, чтобы миграция данных всегда была последней? Есть ли способ сделать миграцию данных не заботясь о том, что «бар» еще не существует? В миграции данных не используется «бар», но по какой-то причине Django по-прежнему считает, что он должен существовать в этот момент ...

Я использую встроенные миграции Django, а не Юг.

ответ

2

Как вы обращаетесь к моделям при миграции данных?

Убедитесь, что вы обращаетесь к ORM через apps/schema_editor, а не напрямую импортируете модели.

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

т.е. в вашей миграции данных вы не должны иметь линию это:

from my_app import MyModel 

, а скорее, что-то больше, как это

MyModel = apps.get_model("my_app", "MyModel") 
+0

Мое приложение использует 'MyModel = apps.get_model ('' my_app , 'my_model "), чтобы захватить модель, а затем создает материал через' MyModel.objects.create() '. Правильно ли это? – Troy

+1

На самом деле, похоже, есть одна модель, которая импортируется напрямую. Это должно быть проблемой. Спасибо за вашу помощь! – Troy

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