覆盖Django Admin的一个Model的对象工具栏

A.J*_*.J. 5 django templates overriding admin

我正在寻找解决方案,我想很多不同的例子让我有点困惑?但我想做的是覆盖.

我的模型工具上有一个按钮. 在此输入图像描述

我还需要另一种相同类型的按钮"上传文件"

这应该将我重定向到另一个我想在同一管理员基础模板中设计自己的视图.

只有一个上传文件控件.

我不确定要搜索什么,因为我真的很困惑.我想要的是通过文件为客户模型中的客户启用管理员.

任何人都帮助我.

谢谢

yty*_*yng 14

[一个]

移动"django.contrib.admin"到你INSTALLED_APPS的尽头INSTALLED_APPS.

你可以制作模板文件

<your_app>/templates/admin/<your_app>/<your_model>/change_list.html
Run Code Online (Sandbox Code Playgroud)

源代码:

{% extends "admin/change_list.html" %}

{% block object-tools-items %}
  <li>
    <a href="<your-action-url>" class="addlink">
     Upload file
    </a>
  </li>
  {{ block.super }}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

[B]

添加change_list_template到您的ModelAdmin中.

class MyModelAdmin(admin.ModelAdmin):

    change_list_template = '<path-to-my-template>.html'
Run Code Online (Sandbox Code Playgroud)

并编写像[A]源代码一样的模板.


jnn*_*nns 7

自从第一次提出这个问题以来,完成您正在寻找的事情变得容易多了。

\n

Django 文档有一节介绍如何覆盖管理模板。要将按钮添加到更改列表对象工具,请按照下列步骤操作:

\n
    \n
  1. 将 Django 版本的change_list_object_tools.html模板文件复制到您的项目或应用程序的模板文件夹中:templates/admin/<app>/<model>/change_list_object_tools.html.

    \n

    您可以从虚拟环境的site-packages文件夹中获取该文件:

    \n
    cp $VIRTUAL_ENV/lib/python3.8/site-packages/django/contrib/admin/templates/admin/change_list_tools.html templates/admin/$APP/$MODEL/ \n
    Run Code Online (Sandbox Code Playgroud)\n

    请注意,您可能需要根据您的 Python 版本调整路径site-packages

    \n
  2. \n
  3. 现在打开模板文件。它看起来像这样:

    \n
    {% load i18n admin_urls %}\n\n{% block object-tools-items %}\n  {% if has_add_permission %}\n  <li>\n    {% url cl.opts|admin_urlname:\'add\' as add_url %}\n    <a href="{% add_preserved_filters add_url is_popup to_field %}" class="addlink">\n      {% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}\n    </a>\n  </li>\n  {% endif %}\n{% endblock %}\n
    Run Code Online (Sandbox Code Playgroud)\n
  4. \n
  5. 将链接添加到您的自定义视图:

    \n
      \xe2\x80\xa6\n  {% if has_add_permission %}\n  <li><a class="addlink" href="{% url \'upload-file\' %}">Upload file</a></li>\n  <li>\n  \xe2\x80\xa6\n
    Run Code Online (Sandbox Code Playgroud)\n
  6. \n
\n

就是这样!如果您不知道:您可以使用ModelAdmin.get_urls()文档)将自定义视图和 URL 添加到 ModelAdmin。为了不必对自定义管理 URL 进行硬编码,您当然可以反转它们(文档)。

\n


Ale*_*ich 1

您可以尝试使用https://github.com/texastribune/django-object-actions

这将允许您添加具有自定义逻辑的按钮。
不过,我不确定您是否能够使用列表屏幕的按钮,因为我仅在模型编辑页面上使用了该按钮。