Должен ли я редактировать файл миграции django для редактирования несовпадающих зависимостей

Я столкнулся с совершенно уникальной проблемой. Я создал модель 1.'message', попользовался ею какое-то время, затем изменил ее на 2. 'messages', после чего снова изменил на >3. 'сообщение', но на этот раз со многими изменениями в полях модели.

Как я узнал впоследствии, миграция django сталкивается с некоторыми проблемами при переименовании моделей. В моих миграциях возникли некоторые проблемы. Хотя я выполнил все миграции правильно, при выполнении 3-й миграции для сообщения я столкнулся с несколькими проблемами, которые я исправил вручную. Теперь, когда я выполнил миграцию для изменений в других моделях, я обнаружил, что эта миграция все еще зависит от второй миграции сообщений. Однако поля, для которых это зависело от второй миграции, были фактически созданы в третьей миграции.

Трассировка, которую я получаю:

ValueError: Lookup failed for model referenced by field activities.Enquiry.message_fk: chat.Message

а также:

  Applying contacts.0002_mailsend...Traceback (most recent call last):
  File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/apps/config.py", line 163, in get_model
    return self.models[model_name.lower()]
KeyError: 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/db/migrations/state.py", line 84, in render
    model = self.apps.get_model(lookup_model[0], lookup_model[1])
  File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/apps/registry.py", line 202, in get_model
    return self.get_app_config(app_label).get_model(model_name.lower())
  File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/apps/config.py", line 166, in get_model
    "App '%s' doesn't have a '%s' model." % (self.label, model_name))
LookupError: App 'chat' doesn't have a 'message' model.

Я хочу спросить, должен ли я вручную редактировать зависимости в файле миграции, чтобы изменить его с миграции 2 на миграцию 3 в сообщениях.

PS: используя джанго 1.7.2


person sprksh    schedule 08.05.2016    source источник


Ответы (3)


Обычно Вы не должны редактировать их вручную.

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

Что вы можете сделать, так это отменить обратные миграции, если у вас нет данных, которые можно потерять. Если вы удаляете миграции, вы должны принять дополнительные меры предосторожности, чтобы убедиться, что в таблице миграции не осталось записей, указывающих на несуществующие миграции. (Я бы посоветовал не удалять миграции вручную, так как это может быть сложно.)

Если только вы проанализировали файлы миграции и имеете четкое представление о том, в какой позиции возникла проблема, то только вам следует подумать о редактировании файла миграции, но не делайте этого, пока вы не справитесь с этим.

В вашем случае да, проблема могла возникнуть из-за переименования, и, как вы говорите, во время миграции вы столкнулись с какой-то проблемой, которую вы исправили вручную, могло случиться так, что процесс застрял между ними, и это создало некоторую проблему. Вы можете изменить зависимость и запустить makemigrations. Если есть циклическая зависимость, она придет напрямую, тогда вам следует отменить изменение. Или просто проведите еще немного анализа и устраните проблему циклической зависимости, отредактировав еще несколько файлов. (сохраняйте резервную копию) Если вам повезет или вы глубоко разбираетесь в миграции, вы можете добиться успеха.

person Rohit    schedule 08.05.2016

Нет, я так не думаю, вам лучше удалить файлы миграции после последних успешных миграций и запустить ее снова.

person Bernard 'Beta Berlin' Parah    schedule 08.05.2016

Пройдя процесс управления миграцией в разных компаниях, я думаю, что редактировать миграции нормально, если вы знаете, что делаете. На самом деле, во многих случаях вам придется отредактировать существующий файл миграции или даже создать новый файл только для того, чтобы внести определенное изменение. Здесь нужно обратить внимание на несколько моментов:

  1. Понимать и соблюдать последовательность выполняемых операций.
  2. Помните о зависимостях
  3. Протестируйте его перед отправкой на постановку и производство
person sprksh    schedule 07.01.2018