У меня есть приложение Django под названием dataapi
, которое создается путем интроспекции базы данных PostgreSQL для записи различных файлов моделей (по одной для каждой схемы). Он работает и предоставляет нам доступ только для чтения к данным, которые нам нужны через ORM, но я разбиваю модели на несколько файлов по схеме, а не на их размещение в (огромном) файле models.py.Почему приложение Django пытается создать миграции, когда определено, что он не позволяет выполнять миграцию в маршрутизаторе?
я определил ROOT/config/routers.py
файл сказать Django Я не хочу модель этого приложения, чтобы использовать миграции:
class DataAPIRouter(object):
"""
A router to control all database operations on models in the
dataapi application.
"""
def db_for_read(self, model, **hints):
"""
Attempts to read dataapi models go to mssqlwrds.
"""
if model._meta.app_label == 'dataapi':
return 'pgdata'
return None
def db_for_write(self, model, **hints):
"""
Attempts to write dataapi models go to mssqlwrds.
"""
if model._meta.app_label == 'dataapi':
return 'pgdata'
return None
def allow_relation(self, obj1, obj2, **hints):
"""
Allow relations if a model in the dataapi app is involved.
"""
if obj1._meta.app_label == 'dataapi' or obj2._meta.app_label == 'dataapi':
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
"""
Make sure the dataapi app doesn't use migrations.
"""
if app_label == 'dataapi':
return False
return True
В моих настройках, я определил маршрутизатор:
DATABASE_ROUTERS = [
'config.routers.DataAPIRouter',
]
Тем не менее, когда я запускаю сухой пробег с использованием makemigrations
, он по-прежнему показывает, что он наносит удар по приложению:
(project) [[email protected] project]$ ./manage.py makemigrations --dry-run
Migrations for 'dataapi':
0001_initial.py:
- Create model aco_amda
- Create model aco_imda
- Create model aco_indfnta
- Create model aco_indfntq
[...]
Я что-то упускаю? Как я могу заставить это приложение игнорировать миграции?
Он игнорируется. 'allow_migrate' предотвращает _execution_ миграции в приложении' dataapi'. Он по-прежнему создает миграцию, вот как это работает. – knbk
Ах, спасибо за разъяснения. Я дам PR, чтобы обновить документацию с помощью этого разъяснения. Очень признателен! Если вы представите это в качестве ответа, я сделаю это правильно. – FlipperPA