Переопределение панели инструментов инструментов Django Admin для одной модели
Я ищу решение, я думаю, что много примеров различных сетей немного смутили меня? но я хочу сделать это переопределить.
У меня есть одна кнопка на инструментах моей модели.
мне нужна еще одна кнопка такого же типа "Загрузить файл"
это должно перенаправить меня в другое представление, которое я хочу создать самостоятельно в том же базовом шаблоне администратора.
с помощью всего одного элемента управления загрузкой файлов.
я не уверен, что искать, потому что я действительно запутался. все, что я хочу, - это разрешить администратору клиента в модели клиента через файл.
Любой, пожалуйста, помогите мне.
Спасибо
2 ответа
[А]
Переехать "django.contrib.admin"
в вашем INSTALLED_APPS
до конца INSTALLED_APPS
,
Вы можете сделать файл шаблона
<your_app>/templates/admin/<your_app>/<your_model>/change_list.html
исходный код:
{% extends "admin/change_list.html" %}
{% block object-tools-items %}
<li>
<a href="<your-action-url>" class="addlink">
Upload file
</a>
</li>
{{ block.super }}
{% endblock %}
[B]
добавлять change_list_template
в ваш ModelAdmin.
class MyModelAdmin(admin.ModelAdmin):
change_list_template = '<path-to-my-template>.html'
И напишите шаблон как [A] исходный код.
С тех пор, как этот вопрос был задан в первый раз, стало намного проще выполнить то, что вы ищете.
В документации Django есть раздел о том, как переопределить шаблоны администратора. Чтобы добавить кнопку в инструменты объекта списка изменений, выполните следующие действия:
Скопируйте версию Django
change_list_object_tools.html
файл шаблона в папку шаблонов вашего проекта или приложения:templates/admin/<app>/<model>/change_list_object_tools.html
.Вы можете получить файл из своего виртуального окружения
site-packages
папка:cp $VIRTUAL_ENV/lib/python3.8/site-packages/django/contrib/admin/templates/admin/change_list_tools.html templates/admin/$APP/$MODEL/
Обратите внимание, что вам может потребоваться изменить путь к
site-packages
для вашей версии Python.Теперь откройте файл шаблона. Это будет выглядеть так:
{% load i18n admin_urls %} {% block object-tools-items %} {% if has_add_permission %} <li> {% url cl.opts|admin_urlname:'add' as add_url %} <a href="{% add_preserved_filters add_url is_popup to_field %}" class="addlink"> {% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %} </a> </li> {% endif %} {% endblock %}
Добавьте ссылку на свой собственный вид:
… {% if has_add_permission %} <li><a class="addlink" href="{% url 'upload-file' %}">Upload file</a></li> <li> …
Это оно! Если вы не знали: вы можете добавить пользовательские представления и URL-адреса в ModelAdmin, используя
ModelAdmin.get_urls()
(документы). Чтобы не нужно было жестко кодировать свои пользовательские URL-адреса администратора, вы, конечно, можете отменить их (документы).
Вы можете попробовать использовать https://github.com/texastribune/django-object-actions.
Это позволит вам добавлять кнопки с пользовательской логикой.
Хотя я не уверен, сможете ли вы нажать кнопку для экрана списка, как я сделал это только для страницы редактирования модели.