【问题标题】:Django using more than 1 package for admin siteDjango 为管理站点使用超过 1 个包
【发布时间】:2017-08-21 08:53:13
【问题描述】:

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

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

class CategoryAdmin(SortableAdmin, ImportExportModelAdmin):

它们相互覆盖。

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

【问题讨论】:

  • 我在使用管理员可排序和导入导出或还原时遇到了同样的问题。据我所知,目前还没有治愈方法。

标签: python django django-import-export


【解决方案1】:

我能够通过页面上使用的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

【讨论】:

  • 这对我有用,我正在使用 django-jet 管理员。唯一的事情是 SortableAdmin 需要在 ImportExportMixin 之前。像这样class CategoryAdmin(SortableAdmin, ImportExportMixin): 我还必须向模板添加样式以使用 CSS inline-flex 显示列表中的按钮。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
  • 2022-10-13
  • 2011-09-23
  • 1970-01-01
  • 2017-10-24
  • 2011-07-22
相关资源
最近更新 更多