python 从Django admin中删除历史记录按钮

deyfvvtc  于 2023-04-10  发布在  Python
关注(0)|答案(3)|浏览(213)

我想根据用户类型从django管理按钮启用/禁用历史记录。

我的最终目标是能够理解如何显示隐藏这个按钮。

2wnc66cl

2wnc66cl1#

我知道这是旧的。我也遇到了这个问题,并根据@elsadek的回答和@daigorocub的评论,这是我如何设法显示/隐藏历史按钮/链接。
创建管理模板以覆盖change_form_object_tools.html的默认管理模板,目录将为app/templates/admin/
这是我的change_form_object_tools.html的样子.它是从django的默认change_form_object_tools.html不同,因为我使用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的默认change_form_object_tools.html,可以在..\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 %}
dw1jzc5e

dw1jzc5e2#

不幸的是,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)
x759pob2

x759pob23#

一个干净的解决方案是覆盖change_form_object_tools.htmltemplate,它需要放置在项目的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 %}

相关问题