Как добавить кнопку в контекст submit_row в django - PullRequest
13 голосов
/ 07 февраля 2012

Я хотел бы добавить дополнительную кнопку в строку отправки в django. Стандартно мы получаем «удалить», «сохранить», «сохранить и продолжить редактирование» и «сохранить и добавить еще». К этому набору я хотел бы добавить еще одну кнопку, которая будет вызывать функцию на модели.

Насколько я понимаю, шаблон change_form генерируется в одном из admin.views. Контекст submit_row передается как контекст.

Я хочу изменить контекст представления администратора. Где я могу найти его в моей файловой системе?

Ответы [ 2 ]

12 голосов
/ 18 сентября 2012

Из того, что я могу сказать, есть два соответствующих файла. Первый

.../django/contrib/admin/templatetags/admin_modify.py

, который имеет следующий раздел:

@register.inclusion_tag('admin/submit_line.html', takes_context=True)
def submit_row(context):
    """
    Displays the row of buttons for delete and save.
    """
    opts = context['opts']
    change = context['change']
    is_popup = context['is_popup']
    save_as = context['save_as']
    return {
        'onclick_attrib': (opts.get_ordered_objects() and change
                            and 'onclick="submitOrderForm();"' or ''),
        'show_delete_link': (not is_popup and context['has_delete_permission']
                              and (change or context['show_delete'])),
        'show_save_as_new': not is_popup and change and save_as,
        'show_save_and_add_another': context['has_add_permission'] and
                            not is_popup and (not save_as or context['add']),
        'show_save_and_continue': not is_popup and context['has_change_permission'],
        'is_popup': is_popup,
        'show_save': True
    }

А второй

.../django/contrib/admin/templates/admin/submit_line.html

что является следующим:

{% load i18n %}
<div class="submit-row">
{% if show_save %}<input type="submit" value="{% trans 'Save' %}" class="default" name="_save" {{ onclick_attrib }}/>{% endif %}
{% if show_delete_link %}<p class="deletelink-box"><a href="delete/" class="deletelink">{% trans "Delete" %}</a></p>{% endif %}
{% if show_save_as_new %}<input type="submit" value="{% trans 'Save as new' %}" name="_saveasnew" {{ onclick_attrib }}/>{%endif%}
{% if show_save_and_add_another %}<input type="submit" value="{% trans 'Save and add another' %}" name="_addanother" {{ onclick_attrib }} />{% endif %}
{% if show_save_and_continue %}<input type="submit" value="{% trans 'Save and continue editing' %}" name="_continue" {{ onclick_attrib }}/>{% endif %}
</div>

Вероятно, вы можете просто добавить пользовательский html во второй файл для отображения новых кнопок.

4 голосов
/ 07 февраля 2012

Переопределить тег блока submit_buttons_bottom в change_form.html

...