【问题标题】:Disable Django model admin buttons (save, delete, etc.)禁用 Django 模型管理按钮(保存、删除等)
【发布时间】:2019-08-10 14:07:13
【问题描述】:

我想在单击其中一个按钮后禁用它们出现在提交行中的所有按钮(保存、保存和编辑、删除等...)。

我开始尝试覆盖管理模型的 change_form。某物 像这样:

class MyAdmin(admin.ModelAdmin):
    change_form_template = 'admin/reports/models/change_form.html'

admin/reports/models/change_form.html 文件中我添加了以下代码:

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

{% load i18n admin_urls %}
<div class="submit-row">
{% block submit-row %}
{% if show_save %}<input type="submit" value="{% trans 'Save' %}" class="default" name="_save">{% endif %}
{% if show_delete_link %}
    {% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %}
    <p class="deletelink-box"><a href="{% add_preserved_filters delete_url %}" class="deletelink">{% trans "Delete" %}</a></p>
{% endif %}
{% if show_save_as_new %}<input class="myclass" type="submit" value="{% trans 'Save as new' %}" name="_saveasnew">{% endif %}
{% if show_save_and_add_another %}<input class="myclass" type="submit" value="{% trans 'Save and add another' %}" name="_addanother">{% endif %}
{% if show_save_and_continue %}<input class="myclass" type="submit" value="{% if can_change %}{% trans 'Save and continue editing' %}{% else %}{% trans 'Save and view' %}{% endif %}" name="_continue">{% endif %}
{% if show_close %}<a href="{% url opts|admin_urlname:'changelist' %}" class="closelink">{% trans 'Close' %}</a>{% endif %}
{% endblock %}
</div>

但我没有看到任何变化(class="myclass" 没有)。

我的下一个更改将是在单击时禁用所有按钮的 js 代码......但现在我在第一个问题上被阻止了。

我使用 python 3 和 Django 2

【问题讨论】:

    标签: javascript python django django-models django-admin


    【解决方案1】:

    如果您尝试向输入添加类,以便在单击时使用 JavaScript 禁用它们,则没有必要。您应该能够很容易地选择按钮,而无需向它们添加类。例如,使用 Django admin 中包含的 jQuery:

    django.jQuery(".submit-row :submit").attr("disabled", "disabled")
    

    如果您确实需要覆盖按钮 HTML 的呈现,您应该考虑覆盖 submit_buttons_bottomsubmit_buttons_top 块:

    {% extends "admin/change_form.html" %}
    {% if save_on_top %}your submit buttons here{% booking_submit_row %}{% endblock %}{% endif %}
    {% block submit_buttons_bottom %}your submit buttons here{% endblock %}
    

    如果您想避免重复使用这种方法,请考虑使用自定义 submit-line.html 并构建自定义模板标签以在上述模板中输出您的提交按钮,如下所示:

    from django.contrib.admin.templatetags.admin_modify import submit_row
    from django.template import Library
    
    
    register = Library()
    
    @register.inclusion_tag("admin/<your app>/<your model>/submit_line.html", takes_context=True)
    def custom_submit_row(context):
        ctx = submit_row(context)
        original = context["original"] if "original" in context else None
        # adjust as you need based on your context
        return ctx
    

    现在您可以在您的自定义change_form.html 中使用:

    {% extends "admin/change_form.html" %}
    {% load custom_admin_modify %}
    {% if save_on_top %}{% custom_submit_row %}{% booking_submit_row %}{% endblock %}{% endif %}
    {% block submit_buttons_bottom %}{% custom_submit_row %}{% endblock %}
    

    希望有所帮助 - 祝你好运!

    【讨论】:

      猜你喜欢
      • 2012-01-16
      • 2014-11-18
      • 2011-04-08
      • 2014-01-09
      • 1970-01-01
      • 2013-12-16
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      相关资源
      最近更新 更多