Django Admin Using both Django Reversion and Django-Import-Export Django Admin Using both Django Reversion and Django-Import-Export django django

Django Admin Using both Django Reversion and Django-Import-Export


Final result:

import export recover deleted links

Inspired from @Aidan Doherty's answer, I created a new class that is a combination of VersionAdmin, ImportMixin, ExportMixin subclasses which extends a custom change_list_template.

Here's how it looks:

ImportExportVersionModelAdmin.py:

from import_export.admin import ImportMixin, ExportMixinfrom reversion.admin import VersionAdminclass ImportExportVersionModelAdmin(ImportMixin, ExportMixin, VersionAdmin):    """    Import, export and Version admin.    Fixes missing link in change_list admin view :)    """    #: template for change_list view    change_list_template = 'change_list_import_export_version.html'

templates/change_list_import_export_version.html:

{% extends "admin/import_export/change_list.html" %}{% load i18n admin_urls %}{% block object-tools-items %}    <li><a href="import/" class="import_link">{% trans "Import" %}</a></li>    <li><a href="export/{{ cl.get_query_string }}" class="export_link">{% trans "Export" %}</a></li>    {% if not is_popup and has_add_permission and has_change_permission %}        <li><a href="{% url opts|admin_urlname:'recoverlist' %}" class="recoverlink">{% blocktrans with cl.opts.verbose_name_plural|escape as name %}Recover deleted {{name}}{% endblocktrans %}</a></li>    {% endif %}    {{ block.super }}{% endblock %}

This way I can use it like this:

class SiteAdmin(ImportExportVersionModelAdmin):    passadmin.site.register(Site, SiteAdmin)

It's directly inspired from import_export's admin.py ImportExportMixin and its change_list_import_export.html template, combined with reversion's template

Note: You can apply this solution to multiple subclasses :)


I ran into the same problem I fixed it by extending the Django admin change_list template and adding the links through that example below.

***change_list.html****    {% extends "admin/change_list.html" %}{% load i18n %} {% block object-tools %}  {% if has_add_permission %}    <ul class="object-tools ">      {% block object-tools-items %}        {% if not is_popup %}          <li><a href="import/" class="import_link">{% trans "Import" %}</a></li>          <li><a href="export/{{ cl.get_query_string }}" class="export_link">{% trans "Export" %}</a></li>          <li><a href="{{recoverlist_url}}" class="recoverlink">{% blocktrans with cl.opts.verbose_name_plural|escape as name %}Recover deleted {{name}}{% endblocktrans %}</a></li>        {% endif %}       <li><a href="add/{% if is_popup %}?_popup=1{% endif %}" class="addlink">{% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}</a></li>     {% endblock %}   </ul> {% endif %}{% endblock %}***admin.py***class MyAdmin(ImportExportMixin, MyModelAdmin):    change_list_template = "change_list.html"    resource_class = MyResource


I haven't done this with Reversion, but I think you'll want to use the ImportExportMixin:

from import_export.admin import ImportExportMixinclass MyModelAdmin(ImportExportMixin, reversion.VersionAdmin):    pass

That's how I'm using it with another subclass, and it's working great.