我正在尝试为同一模型启用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#admin https://django-import-export.readthedocs.org/en/latest/getting_started.html
干杯 xc0m
答案 0 :(得分:4)
我遇到了同样的问题,我通过扩展django admin change_list模板并通过下面的示例添加链接来修复它。
***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
我希望这对你有所帮助
答案 1 :(得分:2)
最终结果:
受到@Aidan Doherty's answer的启发,我创建了一个新类,它是VersionAdmin
,ImportMixin
,ExportMixin
子类的组合,扩展了自定义change_list_template
。< / p>
以下是它的外观:
<强> 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's admin.py ImportExportMixin和its change_list_import_export.html template的启发,加上reversion's template
注意:您可以将此解决方案应用于多个子类:)
答案 2 :(得分:1)
我没有使用Reversion完成此操作,但我认为您将要使用ImportExportMixin:
from import_export.admin import ImportExportMixin
class MyModelAdmin(ImportExportMixin, reversion.VersionAdmin):
pass
这就是我如何将它与另一个子类一起使用,而且效果很好。
答案 3 :(得分:0)
不确定这是否仍然有用,但这是一个快速解决方案:
{% 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