Создание пользовательских кнопок в админке change_form в Django - PullRequest
16 голосов
/ 12 февраля 2011

Я хочу добавить пользовательские кнопки в форму добавления / изменения в интерфейсе администрирования.По умолчанию их всего три:

  • Сохранить и добавить еще один

  • Сохранить и продолжить редактирование

  • Сохранить

Я создал несколько пользовательских методов в своем файле forms.py и хочу создать кнопки для вызова этих методов.Я использовал фрагмент http://djangosnippets.org/snippets/1842/,, но это не совсем то, что я хочу.Этот позволяет создавать кнопки и вызывать методы из файла admin.py, а не forms.py.

Есть ли способ сделать это?

Это мой admin.py код:

class CategoryAdmin(admin.ModelAdmin):
    prepopulated_fields = { "alias": ("title",) }
    form = CategoryForm

admin.site.register(Category, CategoryAdmin)

И мой код forms.py,

class CategoryForm(forms.ModelForm):
    """
    My attributes
    """
    def custom_method(self):
        print("Hello, World!")

Как мне создать кнопку, которая вызывает "custom_method ()"?

Ответы [ 3 ]

29 голосов
/ 10 июня 2015

Один простой способ добавить кнопки - добавить еще одну строку для пользовательских кнопок. Создайте директорию администратора в своем шаблонном каталоге в соответствии с вашими потребностями. Например, я обычно добавляю кнопки для определенных моделей в пользовательский шаблон. Создайте каталог «templates / admin / app / model /».

Затем добавьте файл change_form.html .

{% extends "admin/change_form.html" %}
{% load i18n %}

{% block submit_buttons_bottom %}
    <div class="submit-row">
       <input type="button" value="{% trans 'Another Button' %}" name="_anotherbutton" />
    </div>

    {{ block.super }}
{% endblock %}

Код перед {{ block.super }} основан на шаблоне submit_line.html , который используется тегом шаблона {% submit_row %}. Я предпочитаю этот метод, потому что он прост, но вы должны жить с другим рядом кнопок.

enter image description here

19 голосов
/ 07 июня 2011

Вы можете переопределить admin/change_form.html. Скопируйте версию в contrib.admin.templates в ваш проект. Мой myproject/templates/admin/change_form.html, но вы можете использовать /myproject/myapp/templates/admin/change_form.html.

Затем отредактируйте копию и измените две ссылки на существующий тег шаблона {% submit_row %}, чтобы он указывал на собственный тег шаблона {% my_template_tag %}.

Для тега шаблона используйте contrib.admin {% submit_row %}, но отредактируйте шаблон HTML так, чтобы он содержал любые дополнительные кнопки, которые вы хотите отобразить.

6 голосов
/ 10 сентября 2013

Кнопки отправки в форме изменений отображаются тегом шаблона submit_row. Этот тег отображает шаблон admin/submit_line.html. Поскольку вы хотите добавить к существующим кнопкам, ваш лучший (и DRYest) подход - переопределить admin/submit_line.html.

Например, создайте файл my_project/templates/admin/submit_line.html со следующим содержанием:

{% load i18n admin_urls %}
<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="{% url opts|admin_urlname:'delete' original.pk|admin_urlquote %}" 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 %}

<input type="submit" value="{% trans 'New button 1' %}" name="_button1" {{ onclick_attrib }}/>
<input type="submit" value="{% trans 'New button 2' %}" name="_button2" {{ onclick_attrib }}/>
</div>

Большая часть вышеперечисленного была скопирована с django/contrib/admin/templates/submit_line.html. Вы также можете добавить дополнительные операторы if в шаблон, если вы хотите показывать эти дополнительные кнопки только в определенных случаях.

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