我能够通过覆盖页面上使用的模板来解决这个问题。Admin Sortable 和 Django Import Export 都以不同的方式覆盖了 admin change_list.html 模板,这就是为什么它们不能很好地结合在一起。
我使用 adminsortable 模板作为我的基础(在 中找到site_packages/adminsortable/templates/adminsortable/change_list_with_sort_link.html
),并从 django 导入导出模板(在 中找到)添加了一些片段site_packages/import_export/templates/admin/import_export/change_list_import_export.html
来获得这个合并模板:
{% extends change_list_template_extends %}
{% load i18n %}
{% block object-tools-items %}
{% for sorting_filter in sorting_filters %}
<li>
<a href="./sort/?sort_filter={{ forloop.counter0 }}">{% trans 'Change Order of' %} {{ sorting_filter }}</a>
</li>
{% empty %}
<li>
<a href="./sort/">{% trans 'Change Order' %}</a>
</li>
{% endfor %}
{% include "admin/import_export/change_list_import_item.html" %}
{% include "admin/import_export/change_list_export_item.html" %}
{{ block.super }}
{% endblock %}
这些行:
{% include "admin/import_export/change_list_import_item.html" %}
{% include "admin/import_export/change_list_export_item.html" %}
将导入导出按钮添加到模板。
然后,你需要告诉 django 使用这个模板。SortableAdminBase类有一个名为的字段sortable_change_list_with_sort_link_template
,您可以覆盖该字段以使用新的自定义模板。所以你的管理类看起来像:
class CategoryAdmin(ImportExportMixin, SortableAdmin):
sortable_change_list_with_sort_link_template = 'admin/category/change_list_import_export_sortable.html'
假设您将自定义模板放入admin/category/change_list_import_export_sortable.html
如果一切正常,您应该会在管理页面顶部显示所有 3 个按钮:
Django Import Export Admin Sortable Buttons Screenshot