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

时间:2013-10-23 12:54:57

标签: django templates override admin

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

我的模型工具上有一个按钮。 enter image description here

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

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

只有一个上传文件控件。

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

任何人都帮助我。

由于

3 个答案:

答案 0 :(得分:10)

[A]

"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]源代码的模板。

答案 1 :(得分:1)

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

这将允许您添加具有自定义逻辑的按钮。
虽然,我不确定你是否能够为你的列表屏幕设置一个按钮,因为我只为模型编辑页面做了。

答案 2 :(得分:0)

自从第一次提出这个问题以来,完成您要查找的内容变得更加容易。

Django文档具有a section on how to override admin templates。要将按钮添加到更改列表对象工具,请按照下列步骤操作:

  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/ 
    

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

  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>
      …
    

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