docs/multiple_dbs.rst
Multiple databases
==================
Interacting with Multiple Databases
-----------------------------------
`django-simple-history` follows the Django conventions for interacting with multiple databases.
.. code-block:: python
>>> # 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')
When interacting with ``QuerySets``, use ``using()``:
.. code-block:: python
>>> # This will return a QuerySet from the 'other' database.
Poll.history.using('other').all()
When interacting with manager methods, use ``db_manager()``:
.. code-block:: python
>>> # This will call a manager method on the 'other' database.
>>> poll.history.db_manager('other').as_of(datetime(2010, 10, 25, 18, 4, 0))
See the Django documentation for more information on how to interact with multiple databases.
Tracking User in a Separate Database
------------------------------------
When using ``django-simple-history`` in app with multiple database, you may run into
an issue where you want to track the history on a table that lives in a separate
database to your user model. Since Django does not support cross-database relations,
you will have to manually track the ``history_user`` using an explicit ID. The full
documentation on this feature is in :ref:`Manually Track User Model`.
Tracking History Separate from the Base Model
---------------------------------------------
You can choose whether or not to track models' history in the same database by
setting the flag `use_base_model_db`.
.. code-block:: python
class MyModel(models.Model):
...
history = HistoricalRecords(use_base_model_db=False)
If set to `True`, migrations and audit
events will be sent to the same database as the base model. If `False`, they
will be sent to the place specified by the database router. The default value is `False`.