Эта логика, вероятно, будет распространяться на все ваше приложение.По сути, вам нужно создать функцию, которая будет принимать пользовательский экземпляр, а затем возвращать строку, которая будет отображаться в базе данных:
DATABASE_USER_MAP = {
'username1': 'user1',
}
def get_database(user):
return settings.DATABASE_USER_MAP.get(user.username, 'default')
def some_view(request):
data = Data.objects.using(get_database(request.user)).all()
...
Как только вы получите что-то подобное, вы можете переместить базу данных, определяющую логикув промежуточное ПО и установите его на request
, чтобы вы могли сделать:
def some_view(request):
data = Data.objects.using(request.db).all()
...
Основная проблема заключается в том, что по умолчанию он будет primary
, а не из-за ошибки, заставляя вас быть дотошным при написаниизапросы.
Еще один путь, который вы, возможно, захотите продолжить, - погрузиться в кодовую базу Django, чтобы увидеть, как работает маршрутизатор базы данных и можно ли отправить запрос в качестве подсказки маршрутизатору.Я ничего не знаю об этом, поэтому я не знаю, возможно ли это.Однако, если бы это было возможно, это сняло бы беспокойство, которое я поднял.