Kể từ Django 1.2, bạn có thể xác định nhiều kết nối cơ sở dữ liệu trong settings.py
của mình . Sau đó, bạn có thể sử dụng bộ định tuyến cơ sở dữ liệu để cho Django biết cơ sở dữ liệu nào cần truy cập, một cách minh bạch cho ứng dụng của bạn.
Tuyên bố từ chối trách nhiệm: đây là cách tôi nghĩ nó sẽ hoạt động, tôi chưa bao giờ sử dụng MongoDB trong Django, cũng như tôi chưa kiểm tra xem mã của mình có thực sự hoạt động hay không. :)
settings.py
DATABASES = {
'default': {
'ENGINE': 'django_mongodb_engine',
'NAME': 'mydata',
...
}
'geodata' {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'geodata',
...
}
}
DATABASE_ROUTERS = ['path.to.ModelMetaRouter']
Mô hình
Sau đó, thêm các biến Meta tùy chỉnh vào bảng địa lý của bạn để ghi đè cơ sở dữ liệu của chúng. Không thêm thuộc tính này vào các mô hình được cho là đi đến cơ sở dữ liệu mặc định.
class SomeGeoModel(models.Model):
...
class Meta:
using = 'geodata'
Bộ định tuyến cơ sở dữ liệu
Và viết một bộ định tuyến cơ sở dữ liệu để điều hướng tất cả các mô hình có using
tập hợp thuộc tính meta, với kết nối thích hợp:
class ModelMetaRouter(object):
def db_for_read(self, model, **hints):
return getattr(model._meta, 'using', None)
def db_for_write(self, model, **hints):
return getattr(model._meta, 'using', None)
def allow_relation(self, obj1, obj2, **hints):
# only allow relations within a single database
if getattr(obj1._meta, 'using', None) == getattr(obj2._meta, 'using', None):
return True
return None
def allow_syncdb(self, db, model):
if db == getattr(model._meta, 'using', 'default'):
return True
return None