• en
  • Language: ru

Множественные базы данных

Взаимодействие с несколькими базами данных

django-simple-history следует соглашениям Django для взаимодействия с несколькими базами данных.

>>> # This will create a new historical record on the 'other' database.
>>> poll = Poll.objects.using('other').create(question='Question 1')

>>> # This will also create a new historical record on the 'other' database.
>>> poll.save(using='other')

При взаимодействии с QuerySets используйте using():

>>> # This will return a QuerySet from the 'other' database.
Poll.history.using('other').all()

При взаимодействии с методами менеджера используйте db_manager():

>>> # This will call a manager method on the 'other' database.
>>> poll.history.db_manager('other').as_of(datetime(2010, 10, 25, 18, 4, 0))

Подробнее о том, как взаимодействовать с несколькими базами данных, смотрите в документации Django.

Отслеживание пользователя в отдельной базе данных

При использовании django-simple-history в приложении с несколькими базами данных вы можете столкнуться с проблемой, когда захотите отследить историю по таблице, которая находится в отдельной базе данных от вашей модели пользователя. Поскольку Django не поддерживает кросс-базовые отношения, вам придется вручную отслеживать history_user, используя явный ID. Полная документация по этой функции находится в Ручное отслеживание модели пользователя.

История отслеживания отдельно от базовой модели

Вы можете выбрать, отслеживать или нет историю моделей в той же базе данных, установив флаг use_base_model_db.

class MyModel(models.Model):
    ...
    history = HistoricalRecords(use_base_model_db=False)

Если установлено значение True, миграции и события аудита будут отправляться в ту же базу данных, что и базовая модель. Если False, они будут отправляться в место, указанное маршрутизатором базы данных. Значение по умолчанию - False.