如何从Django模型管理中删除“全选”选项

uinbv5nw  于 2023-06-25  发布在  Go
关注(0)|答案(2)|浏览(140)

Django模型admin允许选择页面中的所有对象来执行某些操作('删除所选对象'是其中之一)。在用户模型页面中选择所有模型对象后,它提供了一个选项“选择所有xxxx用户”(xxxx是一个数字),如图所示。

这允许管理员选择所有用户,当导出为CSV时,如此巨大的数据大小会导致网关超时问题。我们只希望管理员选择在一个单一的页面,而不是在一个去所有的对象。任何有关这方面的帮助是赞赏。

wgmfuz8q

wgmfuz8q1#

如果你不点击Select all XXX users,这个操作只会在你屏幕截图中勾选的用户(50)上执行。

5f0d552i

5f0d552i2#

负责在管理面板中显示该位的模板是admin/actions.html。可以覆盖模型的样板并从中删除该链接。
默认模板有一个如下所示的块:

{% if actions_selection_counter %}
    <span class="action-counter" data-actions-icnt="{{ cl.result_list|length }}">{{ selection_note }}</span>
    {% if cl.result_count != cl.result_list|length %}
    <span class="all hidden">{{ selection_note_all }}</span>
    <span class="question hidden">
        <a href="#" title="{% translate "Click here to select the objects across all pages" %}">{% blocktranslate with cl.result_count as total_count %}Select all {{ total_count }} {{ module_name }}{% endblocktranslate %}</a>
    </span>
    <span class="clear hidden"><a href="#">{% translate "Clear selection" %}</a></span>
    {% endif %}
{% endif %}

您希望覆盖此样板并删除其中作为链接的两个跨度。为了仅覆盖一个模型的模板,应在模板目录中创建以下文件夹结构:admin/<app_name>/<model_name>/
因此,为了将它们放在一起,假设应用程序名称为accounts,模型名称为User,请在templates/admin/accounts/user/actions.html中写入以下内容:

{% extends "admin/actions.html" %}

{% load i18n %}

{% block actions-counter %}
{% if actions_selection_counter %}
    <span class="action-counter" data-actions-icnt="{{ cl.result_list|length }}">{{ selection_note }}</span>
    {% if cl.result_count != cl.result_list|length %}
    <span class="all hidden">{{ selection_note_all }}</span>
    {% endif %}
{% endif %}
{% endblock %}

有关覆盖模板的更多信息:https://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-admin-templates

相关问题