Django Unfold

Polar Sponsor
爱发电 赞助
.NET 9.0

提供使用 django-unfold (v0.56+) 构建高级 Django 管理界面的专业指导。当用户提及 django-unfold、unfold admin 等内容时使用此技能。

Django Unfold Skill.

功能概述

Django Unfold Skill.是一项面向实际任务的技能,主要用于Django Unfold是建在Tailwind CSS上的Django现代管理主题;它是一个滴滴式的 enhanchment dijango.contrib.admin —— 完全兼容所有本地的 Django admin.。

核心要点

  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
  • 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。

使用与执行

实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;

结果检查与注意事项

涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。

Django Unfold 技能指南

Django Unfold 是一个基于 Tailwind CSS 构建的现代化 Django 后台主题。它是 django.contrib.admin 的即插即用增强方案——完全兼容所有原生 Django Admin 模式,同时新增了 UI 组件与面向开发者的功能特性。

当前稳定版本:0.90.x(v0.90 起要求 Django 5.0+;已移除对 Django 4.2 的支持)

⚠️ 关键规则 —— 务必始终遵守

规则 1:每个 ModelAdmin 必须继承自 unfold.admin.ModelAdmin

# ✅ 正确
from unfold.admin import ModelAdmin

@admin.register(MyModel)
class MyModelAdmin(ModelAdmin):
    pass

# ❌ 错误 —— 将丢失全部样式与 Unfold 功能
from django.contrib.admin import ModelAdmin  # 切勿使用此基类

规则 2:INSTALLED_APPS 加载顺序 —— "unfold" 必须位于 "django.contrib.admin" 之前

INSTALLED_APPS = [
    "unfold",                           # 必须置顶
    "unfold.contrib.filters",           # 可选:高级筛选器
    "unfold.contrib.forms",             # 可选:ArrayWidget、WysiwygWidget、crispy
    "unfold.contrib.inlines",           # 可选:NonrelatedInline
    "unfold.contrib.import_export",     # 可选:django-import-export
    "unfold.contrib.simple_history",    # 可选:django-simple-history
    "unfold.contrib.guardian",          # 可选:django-guardian
    "unfold.contrib.constance",         # 可选:django-constance
    "unfold.contrib.location_field",    # 可选:django-location-field
    "django.contrib.admin",             # 必须置于 unfold 之后
]

规则 3:Inline 类也需使用 Unfold 提供的基类

from unfold.admin import StackedInline, TabularInline  # 不要使用 django.contrib.admin 中的类

规则 4:User 与 Group 模型需手动重新注册 —— 详见 references/installation.md

核心 ModelAdmin 配置项参考

from unfold.admin import ModelAdmin
from unfold.contrib.forms.widgets import ArrayWidget, WysiwygWidget
from django.db import models

@admin.register(MyModel)
class MyModelAdmin(ModelAdmin):
    # ── 列表页布局 ──────────────────────────────────────────────────
    list_fullwidth = False               # 展开至全屏宽度
    list_filter_sheet = True             # 筛选器以底部抽屉形式展示(False 表示侧边栏)
    list_filter_submit = False           # 在筛选面板中显示“应用”按钮
    list_horizontal_scrollbar_top = False
    list_disable_select_all = False

    # ── 编辑表单用户体验 ────────────────────────────────────────────
    compressed_fields = True             # 紧凑字段显示模式
    warn_unsaved_form = True             # 离开未保存表单前发出警告
    show_add_link = True                 # 显示“添加”按钮
    change_form_show_cancel_button = False

    # 自定义模板注入(HTML 片段,非完整模板)
    change_form_before_template = "myapp/before_form.html"    # 表单内部顶部
    change_form_after_template = "myapp/after_form.html"      # 表单内部底部
    change_form_outer_before_template = "myapp/outer_top.html"
    change_form_outer_after_template = "myapp/outer_bottom.html"

    # ── 只读字段后处理 ─────────────────────────────────────────────
    readonly_preprocess_fields = {
        "html_field": "html.unescape",
        "text_field": lambda content: content.strip(),
    }

    # ── 表单控件覆盖 ───────────────────────────────────────────────
    formfield_overrides = {
        models.TextField: {"widget": WysiwygWidget},
        # ArrayField: {"widget": ArrayWidget},  # 适用于 PostgreSQL ArrayField
    }

    # ── 操作项(共 5 种类型)——详见 references/actions.md ───────────
    actions_list = []        # 列表页顶部(全局操作)
    actions_row = []         # 列表页每行右侧(行级操作)
    actions_detail = []      # 编辑表单页头部区域(详情操作)
    actions_submit_line = [] # 编辑表单页保存按钮附近(提交行操作)

    # ── 条件字段 —— 详见 references/forms-fields.md ────────────────
    conditional_fields = {
        "field_name": "other_field == 'value'",  # Alpine.js 表达式
    }

    # ── 可展开行区块 —— 详见 references/forms-fields.md ────────────
    list_sections = []   # [SectionClass, ...]

    # ── 编辑表单数据集 —— 详见 references/forms-fields.md ──────────
    change_form_datasets = []  # [DatasetClass, ...]

@display 装饰器

务必始终使用 unfold.decorators.display,而非 Django 内置版本。

from unfold.decorators import display

class OrderAdmin(ModelAdmin):
    list_display = ["show_customer", "show_status", "show_priority"]

    # 两行单元格:主标题 + 副标题
    @display(header=True)
    def show_customer(self, obj):
        return obj.full_name, obj.email   # 元组格式:(主内容, 副标题)

    # 根据字段值映射为带颜色的状态徽章
    @display(
        description="状态",
        ordering="status",
        label={
            "PENDING":   "warning",   # 橙色
            "ACTIVE":    "info",      # 蓝色
            "COMPLETED": "success",   # 绿色
            "FAILED":    "danger",    # 红色
        },
    )
    def show_status(self, obj):
        return obj.status

    # 布尔值标签(使用默认颜色)
    @display(description="VIP", label=True)
    def show_priority(self, obj):
        return obj.is_vip

→ 完整的 @display 与 @action 装饰器文档,请参阅:references/decorators.md

参考文档 —— 各文件适用场景

在实现某类功能前,请先阅读对应参考文档。 每个参考文档均明确标注了与其关联的其他文件路径。

参考文档 适用场景
references/installation.md 从零开始搭建、配置 User/Group、并行运行多个 Admin
references/configuration.md 理解任意 UNFOLD = {...} 配置项:标题、登录页、回调函数、favicon、环境变量等
references/theming.md 调整配色(OKLCH)、侧边栏导航、图标/徽章、Tailwind 自定义 CSS
references/actions.md 添加列表页/行级/详情页/提交行/下拉菜单操作项,以及权限控制与表单内操作
references/filters.md 添加文本/日期/下拉/数值/自动补全/复选框/单选/横向筛选器
references/tabs.md 添加字段集标签页、Inline 标签页、列表页标签页、编辑表单标签页、动态标签页
references/inlines.md 配置 Inline:选项设置、可排序、分页、嵌套、非关联 Inline
references/dashboard-components.md 构建仪表盘、使用组件(卡片/图表/表格/进度条/追踪器/同期群分析)
references/forms-fields.md 条件字段、可展开行区块(sections)、数据集(datasets)、crispy 表单、JsonField 支持
references/decorators.md 完整 @display 参数说明(header、label、mapping 等)及 @action 装饰器参数
references/integrations.md 全部 10 个第三方集成包:celery-beat、import-export、guardian、constance 等
references/advanced.md 自定义页面、自定义站点、可排序列表页、命令面板(Command Palette)、多语言支持

常见陷阱

  • 生产环境缺失样式 → 运行 collectstatic
  • Unfold ≥ 0.56 版本出现 Tailwind 冲突 → 不要加载 Tailwind 3 的 CSS 文件;请改用 UNFOLD["COLORS"] 或升级至 Tailwind 4
  • 自定义页面未出现在侧边栏 → 需手动添加至 UNFOLD["SIDEBAR"]["navigation"]
  • 第三方 Admin 页面未启用 Unfold 样式(如 celery-beat 等)→ 需先注销再使用 unfold.admin.ModelAdmin 重新注册
  • 对 Dataset 使用 list_filter → 不被支持;请改用 get_queryset() 实现过滤逻辑
  • Django 4.2 → Unfold v0.90+ 已不再支持

相关专题

更多
Python Django REST Framework接口安全与认证体系实践
Python Django REST Framework接口安全与认证体系实践

本专题围绕 Django REST Framework 展开,深入讲解 API 认证、JWT 鉴权、权限控制、接口安全防护以及防攻击策略设计。通过完整后端案例,帮助开发者构建安全可靠的 Web API 服务体系。

2026.06.29

140

15

Python Web 框架 Django 深度开发
Python Web 框架 Django 深度开发

本专题系统讲解 Python Django 框架的核心功能与进阶开发技巧,包括 Django 项目结构、数据库模型与迁移、视图与模板渲染、表单与认证管理、RESTful API 开发、Django 中间件与缓存优化、部署与性能调优。通过实战案例,帮助学习者掌握 使用 Django 快速构建功能全面的 Web 应用与全栈开发能力。

2026.02.04

413

30

讯飞绘文全功能使用教程
讯飞绘文全功能使用教程

本专题系统整理讯飞绘文官网入口、注册登录、工作台及内容创作流程,帮助用户熟悉常用功能,快速完成首篇图文内容。

2026.10.14

0

14

讯飞绘文AI写作与文案生成合集
讯飞绘文AI写作与文案生成合集

本专题聚焦讯飞绘文AI写作、提纲生成、文章改写和文案润色,覆盖从主题输入到成稿优化的关键操作与实用技巧。

2026.10.14

0

14

PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

2026.10.10

0

15

Kratos框架HTTP与gRPC服务开发教程
Kratos框架HTTP与gRPC服务开发教程

本专题围绕Kratos框架双协议服务开发,涵盖HTTP路由与处理器编写、参数获取、gRPC服务实现与客户端调用、metadata上下文传递、encoding编解码注册、统一响应封装、超时控制与流式响应实现方法。

2026.10.10

0

15

Kratos框架Protobuf接口定义与代码生成合集
Kratos框架Protobuf接口定义与代码生成合集

本专题讲解Kratos框架接口定义体系,涵盖proto编写规范、proto add/client/server生成命令、http注解路由、validate校验、OpenAPI文档生成、跨服务proto复用与兼容性设计。

2026.10.10

0

15

C++虚函数怎么定义和调用
C++虚函数怎么定义和调用

C++虚函数是实现运行时多态的重要机制。本专题从virtual关键字的基本用法入手,介绍基类与派生类之间的函数重写、基类指针调用派生类方法,以及动态绑定的执行过程,帮助初学者掌握虚函数的核心语法。

2026.10.10

0

26

C++类与对象的封装方法教程
C++类与对象的封装方法教程

C++封装是面向对象编程的核心特性之一,通过类将数据与操作数据的函数组织在一起,并利用访问权限控制外部访问。本专题介绍类的定义、成员变量、成员函数以及public、private和protected的使用方法,帮助初学者掌握封装的基本原理。

2026.10.10

0

32

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Django 6.1 官方文档
Django 6.1 官方文档

共0课时 | 0人学习

Django 教程
Django 教程

共28课时 | 9.8万人学习

Django DRF 源码解析
Django DRF 源码解析

共21课时 | 2万人学习