Django为管理站点使用了超过1个包

时间:2017-03-28 10:19:18

标签: python django django-import-export

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

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

class CategoryAdmin(SortableAdmin, ImportExportModelAdmin):

他们互相覆盖。

enter image description here

enter image description here

按钮或仅显示Admin可排序或Django导入导出。无论如何我可以把它们整合在一起吗?或者,是否有另一个我可以换出的包,以便我可以实现相同的功能(1.更改模型的顺序和2.将csv直接导入模型)

1 个答案:

答案 0 :(得分:2)

我能够通过页面上使用的overriding the template来解决这个问题。 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