У меня есть две базы данных, одна база данных postgres, а другая база данных PostGIS. Затем параметры подключения определяются как:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': ENV('POSTGRES_DB'),
'USER': ENV('POSTGRES_USER'),
'PASSWORD': ENV('POSTGRES_PASSWORD'),
'HOST': ENV('POSTGRES_HOST', default='localhost'),
'PORT': ENV('POSTGRES_PORT', default='5432'),
}
}
DATABASES['gis'] = {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': ENV('POSTGIS_DB'),
'USER': ENV('POSTGIS_USER'),
'PASSWORD': ENV('POSTGIS_PASSWORD'),
'HOST': ENV('POSTGIS_HOST', default='postgis'),
'PORT': ENV('POSTGIS_PORT', default='5432'),
}
У меня также есть два приложения, одно из которых я хочу использовать базу данных PostGIS (называемой study_gis
, а другое - базу данных по умолчанию. Поэтому янастроить маршрутизатор базы данных (dbRouter.py
):
class StudyGISDBRouter(object):
"""
A router to control gis db operations
"""
def db_for_read(self, model, **hints):
"Point all operations on study_gis models to 'gis'"
from django.conf import settings
if 'gis' not in settings.DATABASES:
return None
if model._meta.app_label == 'study_gis':
return 'gis'
return None
def db_for_write(self, model, **hints):
"Point all operations on study_gis models to 'gis'"
from django.conf import settings
if 'gis' not in settings.DATABASES:
return None
if model._meta.app_label == 'study_gis':
return 'gis'
return None
def allow_relation(self, obj1, obj2, **hints):
"Allow any relation if a model in study_gis is involved"
from django.conf import settings
if 'gis' not in settings.DATABASES:
return None
if obj1._meta.app_label == 'study_gis' or obj2._meta.app_label == 'study_gis':
return True
return None
def allow_syncdb(self, db, model):
"Make sure the study_gis app only appears on the 'gis' db"
from django.conf import settings
if 'gis' not in settings.DATABASES:
return None
if db == 'gis':
return model._meta.app_label == 'study_gis'
elif model._meta.app_label == 'study_gis':
return False
return None
Затем я устанавливаю маршрутизатор в моем файле настроек:
DATABASE_ROUTERS = [
'study_gis.dbRouter.StudyGISDBRouter'
]
Проблема:
Как толькоЯ пытаюсь выполнить миграцию и получаю следующую ошибку:
AttributeError: 'DatabaseOperations' object has no attribute 'geo_db_type'
Из других сообщений, в которых есть похожие ошибки, обычно ответ заключается в том, чтобы убедиться, что движок использует серверную часть postgis. Но так как у меня есть это вgis
настройки базы данных, я не понимаю, что является причиной проблемы.
Как я могу убедиться, что одно приложение использует правильную базу данных, помимо того, что у меня уже есть в маршрутизаторе?