Администратор Django Использование реверсии Django и Django-Import-Export
Я пытаюсь включить Django Reversion и Django-Import-Export для одной и той же модели... Не уверен, что моя логика верна или мне следует использовать несколько файлов admin.py и т. Д.
Я пробовал следующее, но это позволяет работать только Django Reversion, если я переключу их на Import Export Works. Было бы здорово, если бы я мог включить оба одновременно.
class MyModelAdmin(reversion.VersionAdmin, ImportExportModelAdmin):
pass
Я посмотрел на readthedocs для обоих проектов, но все еще потерян.
http://django-reversion.readthedocs.org/en/latest/admin.html https://django-import-export.readthedocs.org/en/latest/getting_started.html
Ура xc0m
3 ответа
Конечный результат:
Вдохновленный ответом Эйдана Доэрти, я создал новый класс, представляющий собой комбинацию VersionAdmin
, ImportMixin
, ExportMixin
подклассы, которые расширяют обычай change_list_template
,
Вот как это выглядит:
ImportExportVersionModelAdmin.py
:
from import_export.admin import ImportMixin, ExportMixin
from reversion.admin import VersionAdmin
class 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 %}
Таким образом, я могу использовать это так:
class SiteAdmin(ImportExportVersionModelAdmin):
pass
admin.site.register(Site, SiteAdmin)
Он напрямую основан на файле import.export admin.py ImportExportMixin и его шаблоне change_list_import_export.html в сочетании с шаблоном реверсии
Примечание: вы можете применить это решение к нескольким подклассам:)
Я столкнулся с той же проблемой, что и исправил, расширив шаблон изменения django admin и добавив ссылки через этот пример ниже.
***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
Я надеюсь, что это полезно для вас
Я не сделал этого с Reversion, но я думаю, что вы захотите использовать ImportExportMixin:
from import_export.admin import ImportExportMixin
class MyModelAdmin(ImportExportMixin, reversion.VersionAdmin):
pass
Вот как я использую его с другим подклассом, и он отлично работает.
Не уверен, что это все еще актуально, но вот быстрое решение:
{% extends "admin/change_list.html" %}
{% load i18n admin_urls %}
{% block object-tools-items %}
{% 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 %}
class CampaignAdmin(ImportExportModelAdmin, VersionAdmin):
pass