Переопределение панели инструментов инструментов 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 есть раздел о том, как переопределить шаблоны администратора. Чтобы добавить кнопку в инструменты объекта списка изменений, выполните следующие действия:

  1. Скопируйте версию 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.

  2. Теперь откройте файл шаблона. Это будет выглядеть так:

    {% 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 %}
    
  3. Добавьте ссылку на свой собственный вид:

      …
      {% 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.

Это позволит вам добавлять кнопки с пользовательской логикой.
Хотя я не уверен, сможете ли вы нажать кнопку для экрана списка, как я сделал это только для страницы редактирования модели.

Другие вопросы по тегам