Я создаю некоторые динамические модели Django в своем приложении, и все, кажется, работает как ожидалось, кроме системы миграции.
Если я создаю динамическую модель Django и задаю managed = False, команда Django makemigrations
все еще создает миграцию для этой новой модели. Миграция выглядит примерно так:
class Migration(migrations.Migration):
dependencies = [
('atom', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='books',
fields=[
],
options={
'db_table': 'books',
'managed': False,
},
bases=(models.Model,),
),
]
Если я не создаю перенос, когда я запускаю python manage.py migrate
, я вижу следующее сообщение (с большими страшными красными буквами):
Your models have changes that are not yet reflected in a migration, and so won't be applied.
Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.
Есть ли способ сообщить системе миграции в Django 1.7 игнорировать неуправляемые модели вместе? или, возможно, значение migrations = False
в мета-классе моделей?
ОБНОВЛЕНИЕ: для пояснения, я использую метод для создания моих динамических моделей, аналогичных тем, которые описаны в следующих местах:
- http://dynamic-models.readthedocs.org/en/latest/topics/model.html#topics-model
- https://code.djangoproject.com/wiki/DynamicModels
Этот метод отлично подходит для создания моих динамических моделей на основе информации, хранящейся в моих моделях конфигурации (https://code.djangoproject.com/wiki/DynamicModels#Adatabase-drivenapproach). Мне пришлось регистрировать сигнал, чтобы очистить кэш модели django, чтобы поймать изменения в моделях при изменении экземпляра конфигурации, но все, кажется, работает отлично, за исключением того факта, что для этих моделей создаются миграции. Если я удалю одну из конфигураций, и модель будет удалена из кеша Django, миграция должна быть обновлена снова, удалив модель, которой она не должна заботиться.
Эти динамические модели не используются в приложении конкретно. Нет, где в коде я ссылаюсь на модель книг (из приведенного выше примера). Они генерируются во время выполнения и используются для чтения информации из устаревших таблиц, к которым они предоставляют доступ.