停用Django模型管理按钮(保存,删除等)

时间:2019-03-19 23:14:10

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

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

我开始尝试为管理员模型覆盖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

1 个答案:

答案 0 :(得分:0)

如果您只是试图将类添加到输入中,以便可以在单击时使用JavaScript禁用它们,则没有必要。您应该能够轻松地选择按钮,而无需向其添加类。例如,使用Django管理员中包含的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 %}

希望如此-祝您好运!