Множественные базы данных¶
Взаимодействие с несколькими базами данных¶
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.