Я обнаружил, что вы можете довольно просто направлять модели с помощью этого менеджера:
class SecondDbManager(models.Manager):
def get_queryset(self):
qs = super().get_queryset()
# if `use_db` is set on model use that for choosing the DB
if hasattr(self.model, 'use_db'):
qs = qs.using(self.model.use_db)
return qs
Просто добавьте use_db='databasename'
и этот менеджер к вашей модели, и он работает.
Или, чтобы еще больше упростить его, я создал для него базовую модель:
class SecondDbBase(models.Model):
use_db = 'my_second_db'
objects = SecureDbManager()
class Meta:
abstract = True
И с этим все, что вам нужно сделать, это расширить его так. Вместо:
class Customer(models.Model):
Просто сделайте это, и это сработает:
class Customer(SecondDbBase):
PS. Я не уверен, является ли это хорошей практикой или лучшим решением, но оно работает, и маршрутизация к другим базам данных очень проста:)
PSS. Я когда-либо использовал их только для чтения и записи таблиц, которые не управляются Django (managed = False
), поэтому, если вам нужно создать миграции для них, я не уверен, работает ли это или нет. Возможно, для этого еще нужно использовать DATABASE_ROUTERS
.