Django1.10:
1) Override 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>
Ciò presuppone, naturalmente, che button
s' rappresentazione di stringa è un browser appropriato input
o button
elemento ed è contrassegnato come sicuro con django.utils.safestring.mark_safe
. In alternativa, è possibile utilizzare il filtro modello safe
o accedere direttamente agli attributi di button
per creare <input>
. A mio parere, è meglio isolare tali cose a livello di python.
2) Override 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,
)
Questo metodo consente di aggiungere pulsanti a qualsiasi ModelAdmin
facilmente. In alternativa al passaggio (1), è possibile estendere admin/change_form.html
e sostituire il blocco submit_row
. Ciò sarebbe leggermente più prolisso a causa dei tag extra richiesti nel modello.
Se si desidera che l'azione aggiuntiva sia disponibile su tutti i modelli (o sottoinsiemi specifici), sottoclasse ModelAdmin
con la funzionalità desiderata (un esempio potrebbe essere l'aggiunta di archiviazione ai modelli. È anche possibile aggiungere un override per eliminare- -e gli altri pulsanti predefiniti - in modo che la modalità sia archiviata anziché eliminata, ciò richiederebbe alcune modifiche al modello)
perché non creare una pagina separata che richiede un login amministratore? Questo è spesso più semplice che fare casino con la pagina di amministrazione. –
Un'alternativa distante al pulsante personalizzato è azioni di amministrazione https://docs.djangoproject.com/en/1.10/ref/contrib/admin/actions/ – Wtower