我正在使用2个django软件包:Admin sortable(用于更改模型的顺序)和Django import export(用于将csv直接导入到我的模型中)。
问题在于,如果我将2个包添加到我的模型管理员中,例如
class CategoryAdmin(SortableAdmin, ImportExportModelAdmin):
他们互相覆盖。
按钮或仅显示Admin可排序或Django导入导出。无论如何我可以把它们整合在一起吗?或者,是否有另一个我可以换出的包,以便我可以实现相同的功能(1.更改模型的顺序和2.将csv直接导入模型)
答案 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