fox_12
@fox_12
Расставляю биты, управляю заряженными частицами

Как запретить django создавать ненужные таблицы?

Есть в проекте две базы - одна 'default', другая - скажем 'legacy'.
'legacy' создана с помощью inspectdb - данные из нее читаются без каких-либо проблем.
Но, - база только на чтение - мне нужно оттуда данные только читать, какие-либо операции записи запрещены.
Проблема в том, что при любых миграциях django пытается там создать таблицу 'django_migrations', у него это не получается, и скрипт миграции благополучно валится. Из-за чего я не могу сделать никаких миграций в БД по-умолчанию.
Как запретить django делать это на базе только для чтения?

Роутер использую что-то типа этого:

class LegacyRouter(object):

    def db_for_read(self, model, **hints):
        if model._meta.app_label == 'legacy_app':
            return 'legacy'
        return None

    def db_for_write(self, model, **hints):
        if model._meta.app_label == 'legacy_app':
            return False
        return None

    def allow_relation(self, obj1, obj2, **hints):
        if obj1._meta.app_label == 'legacy_app' or obj2._meta.app_label == 'legacy_app':
            return False
        return None

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        if app_label == 'legacy_app':
            return False
        return None

    def allow_syncdb(self, db, model):
        if db == 'legacy' or model._meta.app_label == 'legacy_app':
             return False
  • Вопрос задан
  • 262 просмотра
Пригласить эксперта
Ответы на вопрос 1
@deliro
Агрессивное программирование
Добавь в модель
class Meta:
    managed = False


Ещё, ради того, чтобы не выстрелить себе в ногу, делал вот такие заглушки в модель:
def save(self, *args, **kwargs):
    raise ValueError('Read-only database')

def delete(self, *args, **kwargs):
    raise ValueError('Read-only database')


И в менеджер:
class CardserverQuerySet(models.QuerySet):
    def create(self, *args, **kwargs):
        raise ValueError('Read-only database')

    def update(self, *args, **kwargs):
        raise ValueError('Read-only database')

    def delete(self, *args, **kwargs):
        raise ValueError('Read-only database')

    def bulk_create(self, *args, **kwargs):
        raise ValueError('Read-only database')

    def get_or_create(self, *args, **kwargs):
        raise ValueError('Read-only database')

    def update_or_create(self, *args, **kwargs):
        raise ValueError('Read-only database')


class CardserverManager(models.Manager):
    def get_queryset(self):
        return CardserverQuerySet(self.model, using='remote')
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы