You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django Admin首页展示各模型的对象数量

问题1:如何正确修改app_list.html而不改动虚拟环境内的Django源文件
  • 按照Django模板加载优先级规则,优先从项目配置的模板目录加载模板,你只需要做以下操作:
    1. 打开项目settings.py,找到TEMPLATES配置项,确认DIRS列表包含项目根目录的templates文件夹,示例配置:
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [BASE_DIR / 'templates'], # 确保这行存在
            'APP_DIRS': True,
            'OPTIONS': {
                # 其他原有配置保持不变
            },
        },
    ]
    
    1. 在项目根目录新建templates/admin文件夹,将虚拟环境中Django自带的app_list.html文件复制到这个文件夹下,后续所有修改都针对这个副本即可,不会影响Django源文件,升级Django版本也不会覆盖你的自定义修改。
问题2:无法获取模型计数的原因及解决方法

原因

你在模板中拿到的model变量并不是Django ORM的模型类,而是Django Admin预先构造的字典格式的上下文数据,仅包含你打印出来的name/object_name/perms等字段,没有绑定ORM的objects管理器,所以你尝试访问model.count/model.objects等属性都会返回空。

解决方法

我们可以通过自定义模板过滤器来实现计数获取:

  1. 在你的任意一个已经在INSTALLED_APPS中注册过的APP下新建templatetags文件夹,在文件夹内新增__init__.py(空文件即可)和admin_count.py两个文件,admin_count.py代码如下:
from django import template
from django.apps import apps

register = template.Library()

@register.filter
def get_obj_count(model_dict, app_label):
    try:
        # 根据应用标识和模型名获取ORM模型类
        model_cls = apps.get_model(app_label, model_dict['object_name'])
        # 返回模型总条数
        return model_cls.objects.count()
    except Exception:
        return 0
  1. 回到你刚才复制到项目里的app_list.html,在文件顶部加载自定义过滤器:
{% load i18n %}
{% load admin_count %} <!-- 新增这行 -->
  1. 把你之前写的{{ model.count }}替换为过滤器调用:
<td>Object - {{ model|get_obj_count:app.app_label }}</td>
  1. 重启Django服务即可看到计数展示。

内容的提问来源于stack exchange,提问作者Cipher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:15:05