update third-party docs for better reversion support
also mention mptt optionsfix_request_path_info
parent
efdebb1575
commit
f2c323754b
|
|
@ -1,23 +1,21 @@
|
|||
Third-party applications support
|
||||
================================
|
||||
|
||||
Django-reversion support
|
||||
django-reversion support
|
||||
------------------------
|
||||
|
||||
`Django-reversion <https://github.com/etianen/django-reversion>`_ works as
|
||||
expected with polymorphic models. However, they require more setup than
|
||||
standard models. We have to face these problems:
|
||||
Support for django-reversion_ works as expected with polymorphic models.
|
||||
However, they require more setup than standard models. That's become:
|
||||
|
||||
* The children models are not registered in the admin site.
|
||||
You will therefore need to manually register them to django-reversion.
|
||||
* Polymorphic models use
|
||||
`multi-table inheritance <https://docs.djangoproject.com/en/dev/topics/db/models/#multi-table-inheritance>`_.
|
||||
The django-reversion wiki explains
|
||||
`how to deal with this <https://github.com/etianen/django-reversion/wiki/Low-level-API#multi-table-inheritance>`_.
|
||||
You will therefore need to manually register them to django-reversion_.
|
||||
* Polymorphic models use `multi-table inheritance <https://docs.djangoproject.com/en/dev/topics/db/models/#multi-table-inheritance>`_.
|
||||
See the `reversion documentation <http://django-reversion.readthedocs.org/en/latest/api.html#multi-table-inheritance>`_
|
||||
how to deal with this by adding a ``follow`` field for the primary key.
|
||||
|
||||
|
||||
Example
|
||||
.......
|
||||
~~~~~~~
|
||||
|
||||
The admin :ref:`admin-example` becomes:
|
||||
|
||||
|
|
@ -25,8 +23,8 @@ The admin :ref:`admin-example` becomes:
|
|||
|
||||
from django.contrib import admin
|
||||
from polymorphic.admin import PolymorphicParentModelAdmin, PolymorphicChildModelAdmin
|
||||
import reversion
|
||||
from reversion import VersionAdmin
|
||||
from reversion.admin import VersionAdmin
|
||||
from reversion import revisions
|
||||
from .models import ModelA, ModelB, ModelC
|
||||
|
||||
|
||||
|
|
@ -51,6 +49,41 @@ The admin :ref:`admin-example` becomes:
|
|||
(ModelC, ModelCAdmin),
|
||||
)
|
||||
|
||||
reversion.register(ModelB, follow=['modela_ptr'])
|
||||
reversion.register(ModelC, follow=['modelb_ptr'])
|
||||
revisions.register(ModelB, follow=['modela_ptr'])
|
||||
revisions.register(ModelC, follow=['modelb_ptr'])
|
||||
admin.site.register(ModelA, ModelAParentAdmin)
|
||||
|
||||
.. _django-reversion-compare-support:
|
||||
|
||||
django-reversion-compare support
|
||||
--------------------------------
|
||||
|
||||
The django-reversion-compare_ views work as expected, the admin requires a little tweak.
|
||||
In your parent admin, include the following method:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
def compare_view(self, request, object_id, extra_context=None):
|
||||
"""Redirect the reversion-compare view to the child admin."""
|
||||
real_admin = self._get_real_admin(object_id)
|
||||
return real_admin.compare_view(request, object_id, extra_context=extra_context)
|
||||
|
||||
As the compare view resolves the the parent admin, it uses it's base model to find revisions.
|
||||
This doesn't work, since it needs to look for revisions of the child model. Using this tweak,
|
||||
the view of the actual child model is used, similar to the way the regular change and delete views are redirected.
|
||||
|
||||
|
||||
django-mptt support
|
||||
-------------------
|
||||
|
||||
Combining polymorphic with django-mptt_ is certainly possible, but not straightforward.
|
||||
It involves combining both managers, querysets, models, meta-classes and admin classes
|
||||
using multiple inheritance.
|
||||
|
||||
The django-polymorphic-tree_ package provides this out of the box.
|
||||
|
||||
|
||||
.. _django-reversion: https://github.com/etianen/django-reversion
|
||||
.. _django-reversion-compare: https://github.com/jedie/django-reversion-compare
|
||||
.. _django-mptt: https://github.com/django-mptt/django-mptt
|
||||
.. _django-polymorphic-tree: https://github.com/edoburu/django-polymorphic-tree
|
||||
|
|
|
|||
Loading…
Reference in New Issue