当前位置:首页 > 技术 > 正文内容

Django Admin后台定制指南

访客 技术 2026年7月4日 1

在Django项目中,通过admin.py文件注册模型类可快速启用后台管理功能:

admin.site.register(models.Employee)

高级配置方法

如需深度定制,需继承ModelAdmin类:

# 方式一:显式注册
class StaffAdmin(admin.ModelAdmin):
    display_fields = ('name', 'department')

admin.site.register(models.Employee, StaffAdmin)

# 方式二:装饰器注册
@admin.register(models.Employee)
class StaffAdmin(admin.ModelAdmin):
    display_fields = ('name', 'department')

常用定制功能

  1. 列表显示配置
    from django.utils.html import format_html
    
    class StaffAdmin(admin.ModelAdmin):
        def action_links(self, obj):
            return format_html('<a href="#">操作</a>')
        
        display_fields = ['avatar', 'id', action_links]
    列表显示效果
  2. 列表可编辑字段
    editable_fields = ['status', 'priority']
  3. 快速筛选器
    filter_options = ['department', 'join_date']
  4. 日期层级导航 日期筛选效果
  5. 详情页字段控制
    # 显示指定字段
    detail_fields = ['name', 'email']
    
    # 排除指定字段
    excluded_fields = ['salary']
    
    # 只读字段
    readonly_fields = ['employee_id']
    详情页效果
  6. 关联模型内联
    # models.py
    class Website(models.Model):
        title = models.CharField(max_length=64)
        domain = models.CharField(max_length=64)
    
    class Section(models.Model):
        title = models.CharField(max_length=64)
        website = models.ForeignKey(Website, on_delete=models.CASCADE)
    
    # admin.py
    class SectionInline(admin.TabularInline):
        model = models.Section
    
    class WebsiteAdmin(admin.ModelAdmin):
        inlines = [SectionInline]
    内联效果
  7. 批量操作
    class StaffAdmin(admin.ModelAdmin):
        actions = ['update_status']
        
        def update_status(self, request, queryset):
            queryset.filter(department=None).update(status='pending')
        
        update_status.short_description = "设置未分配部门的状态"
    批量操作效果
  8. 自定义模板
    custom_list_template = 'admin/custom_list.html'
    custom_form_template = 'admin/custom_form.html'
  9. 字段显示优化
    # 原始ID显示
    raw_id_fields = ('department', 'projects')
    
    # 单选按钮替代下拉框
    radio_fields = {"level": admin.HORIZONTAL}
    
    # 空值显示
    empty_value_display = "-空白-"

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。