Django1.10:
1) Переопределить admin/submit_line.html
:
{% load i18n admin_urls %}
<div class="submit-row">
{% if extra_buttons %}
{% for button in extra_buttons %}
{{ button }}
{% endfor %}
{% endif %}
{% 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 type="submit" value="{% trans 'Save as new' %}" name="_saveasnew" />{% endif %}
{% if show_save_and_add_another %}<input type="submit" value="{% trans 'Save and add another' %}" name="_addanother" />{% endif %}
{% if show_save_and_continue %}<input type="submit" value="{% trans 'Save and continue editing' %}" name="_continue" />{% endif %}
</div>
Это, конечно, предполагает, что строковое представление button
является подходящим элементом браузера input
или button
и помечено как безопасное django.utils.safestring.mark_safe
. Кроме того, вы можете использовать шаблонный фильтр safe
или получить доступ к атрибутам button
напрямую, чтобы создать <input>
. На мой взгляд, лучше выделить такие вещи на уровне Python.
2) Переопределить MyModelAdmin.change_view
:
def change_view(self, request, object_id, form_url='', extra_context=None):
extra_context = extra_context or self.extra_context()
return super(PollAdmin, self).change_view(
request, object_id, form_url, extra_context=extra_context,
)
Этот метод позволяет легко добавлять кнопки к любому ModelAdmin
. В качестве альтернативы шагу (1) вы можете расширить admin/change_form.html
и переопределить блок submit_row
. Это будет немного более многословно из-за дополнительных тегов, необходимых в шаблоне.
Если вы хотите, чтобы дополнительное действие было доступно для всех ваших моделей (или определенного подмножества), то подкласс ModelAdmin
с желаемой функциональностью (например, можно добавить архивирование в ваши модели. Вы даже можете добавить переопределение для удаления - и другие кнопки по умолчанию - чтобы режим был заархивирован, а не удален; для этого потребуются некоторые изменения шаблона)