Я создаю проект в django и django rest framework.Это API для углового приложения.Настройка базы данных состоит из нескольких баз данных.одна - база данных по умолчанию, все таблицы django находятся в этой базе данных;остальные базы данных принадлежат к типу пользователей, каждый пользователь должен иметь отдельную базу данных.Таким образом, все пользовательские данные отправляются в отдельную базу данных.Чтобы динамически реализовать выбор базы данных, пользовательский объект имеет дополнительное поле для хранения базы данных, в которую необходимо выполнить запись.
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
"""Custom User model."""
database= models.CharField(max_length=9)
Причиной этого было повышение производительности, поскольку каждая база данных является отдельной, ListView и DetailView будут работать быстрее, чемесли данные были сохранены только в одной базе данных.
Я знаю, что могу выбрать базу данных для хранения, используя метод using в менеджере моделей.В остальном API-интерфейсы работают нормально, и данные хранятся в отдельных базах данных, но в итоге я переопределил методы, которые определил django.Это добавление стоимости разработки к проекту.Внешние ключи и ключи ManytoMany должны быть разрешены в текущей базе данных пользователя, чего не происходит, поскольку я настроил настройку базы данных.Кроме того, мой код не может быть таким же хорошим, как у них: p, как они пишут django в течение многих лет.
Я уже переписал много наборов запросов, но django все еще использует базу данных по умолчанию много раз.Если бы я только мог использовать объект запроса в менеджере моделей моделей django, чтобы поменять базу данных по умолчанию для каждого запроса, я думаю, все было бы иначе.
Мои вопросы -
Есть ли способ получить доступ к объекту запроса в менеджере моделей?Я мог бы сделать что-то с эффектом приведенного ниже кода.
класс CustomManager (models.Manager):
def get_queryset(self, request):
return super(CustomManager, self).using(request.user.database).get_queryset()
Менеджер моделей имеет свойство _db, которое можно использовать длявыберите базу данных.Будет ли это лучше?если да, то как и где в коде?
- Есть ли лучший способ реализовать отдельные базы данных?
Заранее спасибо.
С уважением