Имеется:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'foo',
'bar'
}
Приложения 'foo' и 'bar' живут в разных отдельных базах. Вся contrib-щина должна жить в локальной sqlite, она нужна исключительно из-за админки, причом permissions пофигу.
Очевиный расклад:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR + '/var/db.sqlite'
},
'foo': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'HOST': 'foohost',
'NAME': 'foo'
},
'bar': {
'ENGINE': 'django.db.backends.postgresql',
'HOST': '',
'NAME': 'bar'
}
}
DATABASE_ROUTERS = ['regions.dbrouter.DbRouter'] # возвращает тупо model._meta.app_label
Известная проблема: migrate не умеет в dbrouter и суёт всё либо в default, либо в базу указанную --database. А вот известного решения проблемы я что-то не нагуглил.
Если мигрировать приложения по отдельности с указанием базы:
./manage.py migrate auth
./manage.py migrate admin
./manage.py migrate sessions
# к этому моменту всяческие contenttype и permissions для всех обнаруженных приложений уже созданы
./manage.py migrate foo --database=foo
# тут срабатывает post_migrate_signal и auth/contenttypes лезет в базу foo за своими таблицами...
И всё сваливается с "Error creating new content types. Please make sure contenttypes "
А при запуске runserver ругается, что You have unapplied migrations. Хотя вроде всё работает.
Такие дела.