Отключить кнопки администратора модели Django (сохранить, удалить и т. Д.) - PullRequest
0 голосов
/ 20 марта 2019

Я бы хотел отключить все присутствующие кнопки в строке отправки (сохранить, сохранить и редактировать, удалить и т. Д.) После нажатия на одну из них.

Я началпопробуйте переопределить 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 голосов
/ 20 марта 2019

Если вы пытаетесь добавить классы к входам только для того, чтобы вы могли использовать JavaScript для их отключения при нажатии, это не обязательно. Вы должны легко выбирать кнопки, не добавляя к ним классы. Например, используя jQuery, включенный в админку Django:

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

Если вам действительно необходимо переопределить рендеринг кнопки HTML, вам следует обратить внимание на переопределение блоков submit_buttons_bottom и submit_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 %}

Надеюсь, это поможет - удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...