1

我正在使用 2 个 django 包:Admin sortable(用于更改模型的顺序)和Django import export(用于将 csv 直接导入我的模型)。

问题是,如果我将 2 个包添加到我的模型管理员中,例如

class CategoryAdmin(SortableAdmin, ImportExportModelAdmin):

它们相互覆盖。

在此处输入图像描述

在此处输入图像描述

这些按钮要么只显示 Admin sortable 要么 Django import export。无论如何我可以将它们整合在一起吗?或者,是否有另一个包我可以换掉,这样我就可以实现相同的功能(1.更改模型的顺序和 2.将 csv 直接导入模型)

4

1 回答 1

3

我能够通过覆盖页面上使用的模板来解决这个问题。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

于 2018-01-03T16:37:15.393 回答