Удалить ссылку на приложение после добавления зависимостей модели

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

У кого-нибудь есть известное решение для удаления таких требований к приложениям?

чтобы привести пример, скажем, у меня есть внешнее приложение со следующей моделью:

class ExternalInfo(models.Model):
    random_field = CharField()

и в вашем приложении проекта у вас есть запись клиента:

class Customer(models.Model):
    name = CharField()
    external_info = ForegnKey(external_app.ExternalInfo, null=True)

миграция 0001 приложения создает внешний ключ для модели во внешнем приложении. Проходит 10 месяцев, и спустя 10 миграций вам нужно удалить external_info из модели клиента, и вы хотите удалить external_app из проекта. Как удалить эту зависимость, не нарушая старые миграции?


person Nathan Tregillus    schedule 28.03.2016    source источник


Ответы (1)


Итак, мой способ обхода этой проблемы состоял в том, чтобы выполнить следующие шаги по порядку:

  1. создать сценарий миграции, который удалит столбец external_info из модели клиента
  2. удален весь код, который ссылался на указанное поле
  3. изменил миграцию 0001, чтобы создать поле внешнего ключа для другой модели, существовавшей до миграции 0001.
  4. удалил приложение из требований пипа и установил приложения

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

person Nathan Tregillus    schedule 29.03.2016
comment
Можете ли вы объяснить шаг 3? - person jobima; 25.09.2018
comment
По сути, я переписал историю миграции в таблицу, не содержащуюся в модуле, что позволило мне успешно удалить зависимость - person Nathan Tregillus; 25.09.2018