Удалить кнопку истории из админки Django

Я хочу включить / отключить историю от кнопки администратора django в зависимости от типа пользователя.

Моя конечная цель - понять, как скрыть эту кнопку.

3 ответа

Решение

К сожалению, в Django нет простого способа переключения кнопки "История", как, например, для кнопки "Добавить". Самый простой способ - переписать файл change_form.html и удалить следующие строки из block object-tools-items:

<li>
        {% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %}
        <a href="{% add_preserved_filters history_url %}" class="historylink">{% trans "History" %}</a>
</li>

Имейте в виду, что вы должны указать change_form для каждой модели администратора. Пример:

class TestAdmin(admin.ModelAdmin):
    # path to the app_name/templates/admin/app_name/change_form.html
    change_form_template = 'admin/app_name/change_form.html'

# Register your models here.
admin.site.register(Test, TestAdmin)

Чистым решением было бы переопределить change_form_object_tools.html шаблон, который нужно разместить вtemplates/admin/ вашего проекта.

    {% load i18n admin_urls %}
    {% block object-tools-items %}

    {% block comment %}
     <li>
        {% url opts|admin_urlname:'history' original.pk|admin_urlquote as   history_url %}
        <a href="{% add_preserved_filters history_url %}" class="historylink">
 {% translate "History" %}</a>
    </li>
    {% endcomment %}

    {% if has_absolute_url %}<li><a href="{{ absolute_url }}" class="viewsitelink">{% translate "View on site" %}</a></li>{% endif %}
    {% endblock %}

Я знаю, что это старо. Я также сталкиваюсь с этой проблемой, и, судя по ответу @elsadek и комментарию @daigorocub, мне удается показать/скрыть кнопку/ссылку истории.

создайте шаблон администратора, чтобы переопределить шаблон администратора по умолчанию для каталога, который будетapp/templates/admin/.

это моя внешность. он отличается от значения по умолчанию для django, поскольку я использую django-jazzmin для шаблона администратора, но процесс тот же.

      {% load i18n admin_urls jazzmin %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}

{% block object-tools-items %}
    {% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %}

    # Validate if the user is super user, if true, the history button is displayed, else, remove the history button.
{% if request.user.is_superuser %} 
    <a class="btn btn-block {{ jazzmin_ui.button_classes.secondary }} btn-sm" href="{% add_preserved_filters history_url %}">{% trans 'History' %}</a>
    {% endif%}
    {% if has_absolute_url %}
        <a href="{{ absolute_url }}" class="btn btn-block {{ jazzmin_ui.button_classes.secondary }} btn-sm">{% trans "View on site" %}</a>
    {% endif %}
{% endblock %}

для справки, это значение по умолчанию для django, которое можно найти в..\python3.11\site-packages\django\contrib\admin\templates\admin\

change_form_object_tools.html

      {% load i18n admin_urls %}
{% block object-tools-items %}
<li>
    {% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %}
    <a href="{% add_preserved_filters history_url %}" class="historylink">{% translate "History" %}</a>
</li>
{% if has_absolute_url %}<li><a href="{{ absolute_url }}" class="viewsitelink">{% translate "View on site" %}</a></li>{% endif %}
{% endblock %}
Другие вопросы по тегам