django: исключить модели из миграции

В моем приложении django (django 1.8) я использую две базы данных, одну «default», которая представляет собой MySQL, а другую — базу данных без схемы, доступную только для чтения. У меня есть две модели, которые обращаются к этой базе данных, и я хотел бы навсегда исключить эти две модели из миграции данных и схемы:

  • makemigrations никогда не должен обнаруживать какие-либо изменения и создавать для них миграции
  • migrate никогда не должен жаловаться на отсутствующие миграции для этого приложения

До сих пор я пробовал разные вещи, все безуспешно:

  • использовал опцию managed=False Meta на обеих моделях
  • добавил к моему маршрутизатору метод allow_migrate, который возвращает False для обеих моделей

У кого-нибудь есть пример того, как этот сценарий может быть достигнут? Спасибо за вашу помощь!


person thekorn    schedule 28.10.2015    source источник
comment
Обычно managed=False это путь. В чем проблема?   -  person Ivan    schedule 28.10.2015
comment
включите часть кода, которую вы сделали, также потому, что, как предполагает @Ivan, это путь   -  person Renjith Thankachan    schedule 28.12.2016
comment
Я считаю, что этот пост отвечает на ваш вопрос: stackoverflow.com/questions/33820715/   -  person Brian Fincher    schedule 06.01.2017
comment
Проверьте этот ответ: stackoverflow.com/a/26789687/3042057   -  person Emin Mastizada    schedule 17.03.2017


Ответы (3)


До сих пор я пробовал разные вещи, все безуспешно:

  • использовал опцию управляемого = ложного мета на обеих моделях

Этот параметр (атрибут managed = False в мета-параметрах модели), похоже, соответствует требованиям.

Если нет, вам нужно расширить вопрос, чтобы точно сказать, что особенного в вашей модели, что managed = False не выполняет эту работу.

person bignose    schedule 17.05.2017

Я думал, у меня проблема с makemigrations. Он делает вид, что выполняет миграцию по модели managed = False, но для этой модели не генерируется код SQL.

Вот мой пример, модель Smdocumets неуправляемая, и код SQL не был сгенерирован.

миграция python manage.py

Migrations for 'monitor':
  monitor\migrations\0005_auto_20171102_1125.py
    - Create model Smdocuments
    - Add field sid to db
    - Alter field name on db

python manage.py sqlmigrate монитор 0005

BEGIN;
--
-- Create model Smdocuments
--
--
-- Add field sid to db
--
ALTER TABLE "monitor_db" RENAME TO "monitor_db__old"; 
...
person Lamak    schedule 02.11.2017

У вас есть правильное решение:

использовал опцию управляемого = ложного мета на обеих моделях

Может показаться, что это не работает, но вполне вероятно, что вы неправильно вытесняете окончательный результат, когда видите - Create model xxx для моделей с managed = False при запуске makemigrations. Как вы проверяли/подтверждали выполнение миграции?

makemigrations по-прежнему будет печатать на терминале - Create model xxx и создавать код в файле миграции, но эти миграции фактически не приведут к какому-либо коду SQL и не появятся в Running migrations: при запуске migrate.

person Ron    schedule 20.07.2021