diff --git a/import_export/templates/admin/app_list.html b/import_export/templates/admin/app_list.html new file mode 100644 index 000000000..058ebc33e --- /dev/null +++ b/import_export/templates/admin/app_list.html @@ -0,0 +1,91 @@ +{% load i18n %} +{% load admin_urls %} +{% load import_export_filters %} + + + +{% if app_list %} + {% for app in app_list %} +
+ + + {% for model in app.models %} + + {% if model.admin_url %} + + {% else %} + + {% endif %} + + {% if model.add_url %} + + {% else %} + + {% endif %} + + {% if model|is_importable:request and model.add_url %} + + {% elif model.add_url %} + + {% else %} + + {% endif %} + + {% if model.admin_url and show_changelinks %} + {% if model.view_only %} + + {% else %} + + {% endif %} + {% elif show_changelinks %} + + {% endif %} + + {% if model|is_exportable:request and model.admin_url and show_changelinks %} + + {% elif model.admin_url %} + + {% elif show_changelinks %} + + {% endif %} + + {% endfor %} +
+ {{ app.name }} +
+ {{ model.name }} + {{ model.name }} + {% translate "Add" %} + + {% trans "Import" %} + + {% translate "Import" %} + + {% translate "View" %} + + {% translate "Change" %} + + {% translate "Export" %} + + {% translate "Export" %} +
+
+ {% endfor %} +{% else %} +

{% translate "You don’t have permission to view or edit anything." %}

+{% endif %} diff --git a/import_export/templatetags/import_export_filters.py b/import_export/templatetags/import_export_filters.py new file mode 100644 index 000000000..545493b6a --- /dev/null +++ b/import_export/templatetags/import_export_filters.py @@ -0,0 +1,28 @@ +from django import template +from django.contrib import admin + +register = template.Library() + + +@register.filter +def is_exportable(obj, request): + model_class = obj["model"] + admin_class = admin.site._registry[model_class] + return hasattr( + admin_class, "has_export_permission" + ) and admin_class.has_export_permission(request) + + +@register.filter +def is_importable(obj, request): + model_class = obj["model"] + admin_class = admin.site._registry[model_class] + return hasattr( + admin_class, "has_import_permission" + ) and admin_class.has_import_permission(request) + + +@register.filter +def get_opts(obj): + model_class = obj["model"] + return model_class._meta diff --git a/tests/settings.py b/tests/settings.py index e1b305801..0310315ba 100644 --- a/tests/settings.py +++ b/tests/settings.py @@ -4,13 +4,13 @@ import django INSTALLED_APPS = [ + "import_export", "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.sites", - "import_export", "core", ]