自定义 Django 管理索引页面以显示模型对象

2024-03-17

在 Django 管理索引页面中,通常会列出应用程序及其模型。模型对象如何也列在该索引页中?我不仅想显示应用程序,还想显示其模型对象。应该如何定制呢?


我希望我的网站具有相同的功能,并通过对核心 django 系统进行轻微修改来添加它。

Step 1:首先,我们需要一种方法来指示哪些模型应该列出其属性。将以下代码添加到您想要列出实例的模型(在 models.py 中):

class Meta:
    list_instances = True

Step 2:我们需要修改 Django 来识别和读取这个新属性。在 core-django 文件:db/models/options.py 中,大约在第 22 行将 'list_instances' 附加到 DEFAULT_NAMES:

DEFAULT_NAMES = ('verbose_name', 'verbose_name_plural', 'db_table', 'ordering',
             'unique_together', 'permissions', 'get_latest_by',
             'order_with_respect_to', 'app_label', 'db_tablespace',
             'abstract', 'managed', 'proxy', 'auto_created', 'list_instances')

在同一个文件中,大约在第 52 行,在其他属性之后为此属性创建一个默认字段:

self.list_instances = False

Step 3: 我们需要将此信息传递给生成索引页的模板。在 core-django 文件:contrib/admin/sites.py 中,在 index() 方法内和“if has_module_perms:”部分内,添加以下代码:

instances = []
if (model._meta.list_instances == True):
    instances = model_admin.queryset(None)

这将创建要显示的实例列表,但前提是设置了 list_instance 属性。在同一文件中,再往下几行,将这些值附加到“model_dict”构造中。

model_dict = {
    'name': capfirst(model._meta.verbose_name_plural),
    'admin_url': mark_safe('%s/%s/' % (app_label, model.    __name__.lower())),
    'perms': perms,
    'list_instances':model._meta.list_instances,
    'instances': instances,
}

Step 4: 最后一步是修改模板以支持这一点。编辑 core-django 文件 /contrib/admin/templates/admin/index.html 或将此文件复制到特定应用程序的 templates/admin/ 目录。在生成行的标准代码后面添加几行,以生成“子行”(如果适用)。大致在第 40 行,就在“/tr>”和“{% endfor %}”之间:

{% if model.list_instances %}
    {% for instance in model.instances %}
    <tr>
        <td colspan="2" style="padding-left: 2em;">{{ instance }}</td>
        {% if model.perms.change %}
            <td><a href="{{ model.admin_url }}{{ instance.id }}/" class="changelink">{% trans 'Change' %}</a></td>
        {% else %}
            <td>&nbsp;</td>
        {% endif %}
    </tr>
    {% endfor %}
{% endif %}

这将导致该项目以由生成的名称列出unicode模型中的 () 方法。

Step 5: 你瞧!它应该看起来像这样:

Edit: 可选步骤 6: 如果您希望实例名称也可单击,只需更改模板(index.html)并替换:

<td colspan="2" style="padding-left: 2em;">{{ instance }}</td>

with:

<td colspan="2" style="padding-left: 2em;">        
    {% if model.perms.change %}            
        <a href="{{ model.admin_url }}{{ instance.id}}">{{ instance }}</a>
    {% else %}
        {{ instance }}
    {% endif %}
</td>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义 Django 管理索引页面以显示模型对象 的相关文章

随机推荐

  • 选择源代码控制系统:VSS 之后的逻辑下一步

    过去几个月我一直在使用 Git 并且很喜欢它 我研究了如何在企业环境中托管它 考虑到一个 10 人团队使用 Visual SourceSafe 使用 Coldfusion Powerbuilder PHP 和一些 NET 进行编程 令我惊讶
  • 如何使用 Apache POI 在 Word .docx 文件中正确生成 RSID 属性?

    我一直在使用 Apache POI 来操作 Microsoft Word docx 文件 即打开最初在 Microsoft Word 中创建的文档 对其进行修改 然后将其保存到新文档中 我注意到 Apache POI 创建的新段落缺少修订保
  • CVS:列出标签(或日期)之间更改的所有文件

    有没有办法列出CVS中两个标签之间发生更改的所有文件 每次我们发布版本时 我们都会向该版本中的所有文件应用一个标签 我想找到版本之间更改的所有文件 如果我能找到两个日期之间更改的所有文件 它也会起作用 我想这个命令会有帮助 cvs diff
  • 使用项目反应器 mergeWith() 运算符来实现“if/elseif/else”分支逻辑

    我正在尝试使用项目反应堆 mergeWith运算符以实现if elseif else分支逻辑如下所述 RxJS If Else 运算符在哪里 https rangle io blog rxjs where is the if else op
  • 来自两个派生类的多重继承

    我有一个充当接口的抽象基类 我有两个派生类 集 它们实现了抽象类的一半 一个 集合 定义与初始化相关的抽象虚拟方法 另一个 集合 定义与实际 工作 相关的方法 然后 我有派生类 它们使用多重继承来构造完全定义的类 并且本身不添加任何内容 所
  • 大虾:在PDF中打印unicode字符串

    我正在使用 Prawn 在 Rails 3 应用程序中生成 PDF 是否可以像在 HTML 视图中一样将 Unicode 字符串打印到 PDF 中 例如 in show html erb结果字形 同时 pdf text raw unicod
  • 加密且安全的 Docker 容器

    我们都知道无法开源并自由分发软件的情况 而我就处于其中一种情况 我有一个应用程序 它由许多二进制文件 从 C 源代码编译 和将其全部包装到系统中的 Python 代码组成 该应用程序曾经作为云解决方案工作 因此用户可以通过网络访问应用程序功
  • 使用 ws4py 创建自己的应用程序

    我使用 ws4py 创建了一个 Web 服务器套接字 它使用了cherrypy 当我使用连接到服务器时ip port它连接完美 并且能够通过多个浏览器聊天 但是当我尝试连接时ip port ws它也有效 但是 在我不使用连接后ws 我无法握
  • jQuery 中的多个选择器

    我正在尝试运行这段代码 input value OK value Recrutar value Criar id attack name btn click 因此 如您所见 我正在尝试选择一个值等于 OK 或 Recrutar 或 Cria
  • 为什么IntelliJ Idea找不到GO SDK的位置?

    我下载了go1 4 darwin amd64 osx10 8 tar gz https golang org dl 并将其解压到我的本地目录中 基于什么安装到自定义位置 https golang org doc install说我在环境变量
  • jQuery - 专注于 TR

    好的 所以我正在制作一个插件 允许在我的网站中内联编辑表格 到目前为止进展顺利 我已经完成了大部分工作 但我似乎无法正确地将焦点移出表格 因此 如果有人完成编辑并开始编辑新行或只是单击该行之外的内容 则应该保存并恢复正常 但是 如果我在行上
  • Android NumberPicker 隐藏递增和递减按钮

    我正在使用一个数字选择器 http developer android com reference android widget NumberPicker html并且目标是 API 11 及更高版本 3 0 及更高版本 因此我使用受支持的
  • 如何在 R 中加载以 HDF5 文件形式保存在 pandas 中的数据帧?

    我将 pandas 中的数据帧保存在 HDF5 文件中 import numpy as np import pandas as pd np random seed 1 frame pd DataFrame np random randn 4
  • 如何使用 Perl 的 XML::Twig 向子元素添加属性?

    我有一个像这样的 XML 字符串
  • phpstorm symfony2 缺少服务警告

    我已经为 Phpstorm 安装了 Symfony2 插件 但我无法让 IDE 查看这些现有服务或其他注入的对象 能否以某种方式修复这些问题 从而使警告消失 我遇到了类似的问题 建议仔细检查以下内容 正如 Marcel建议的 检查你的Sym
  • AngularJS v1.3 打破翻译过滤器

    在 Angular v1 2 中 我使用以下代码在应用程序中提供本地化字符串 var i18n angular module i18n i18n service i18n function http timeout A dictionary
  • pyplot.subplots:python 和 jupyter 笔记本中的不同行为

    在参加 Kaggle 比赛时 我遇到了一些奇怪的问题 基本上 我正在尝试将 am 图像的矢量表示形式转换为 png 文件 它在 iPython 中完美运行 代码如下 def drawing to np prepare data drawin
  • 为什么 .Net 没有 Thread.Start() 的通用版本?

    我想知道为什么 Net 没有启动线程的通用方法 例如 我们启动一个像下面这样的线程 Thread th new Thread SayHello th Start Hello private static void SayHello obje
  • 具有单一选择的列表框,并且单击时也取消选择...?

    我需要一个在第一次单击时选择并在第二次单击时取消选择的列表框 以便任何时候只选择零个或一个项目 当您按住 crtl 时 选择 取消选择是在列表框中实现的 SelectionMode Single 但不幸的是 我的用户都不知道这一点 使用 S
  • 自定义 Django 管理索引页面以显示模型对象

    在 Django 管理索引页面中 通常会列出应用程序及其模型 模型对象如何也列在该索引页中 我不仅想显示应用程序 还想显示其模型对象 应该如何定制呢 我希望我的网站具有相同的功能 并通过对核心 django 系统进行轻微修改来添加它 Ste