📦 Django

v1.0.0

使用 django-unfold(v0.56+)构建高级 Django 管理界面的专家指导。当用户提及 django-unfold、unfold ad... 时调用此技能。

8· 8·0 当前·0 累计
ijmadalena 头像by @ijmadalena (Ismael J. Madalena A.)
0
安全扫描
VirusTotal
Pending
查看报告
OpenClaw
安全
high confidence
这是一份仅用于说明的 django-unfold 管理后台主题文档技能;其文件、示例与需求均与所述目的保持一致,不会索取密钥、安装代码或执行意外操作。
评估建议
This 技能 is documentation and examples for the django-unfold admin theme and 应用ears internally consistent. Before following its 安装ation instructions, 验证 the django-unfold package you 安装 (检查 PyPI/GitHub 仓库, mAIntAIner, and release artifacts) because the 技能's metadata 列出s no homepage or source. Note minor doc inconsistencies (the description mentions "v0.56+" while later text 状态s current stable 0.90.x, and the 安装ation section includes an uncommon command `uv 添加` which you should confirm). Also reme...
详细分析 ▾
用途与能力
名称/描述与提供的 SKILL.md 及参考文档一致:所有示例和选项均与 django-unfold admin 功能相关。所请求的构件(无)及示例(ModelAdmin、UNFOLD 设置、回调)均适用于 django-unfold 的辅助/参考。
指令范围
SKILL.md 和参考文件仅为文档与代码示例,用于说明如何配置 django-unfold,提供读取进程环境变量(如 os.getenv)并使用 Django API 的示例回调函数,但未指示 Agent 读取本地文件、环境密钥或向外部端点传输数据。示例回调在 Django 服务器上运行(此场景属正常)。
安装机制
此技能无安装规范,仅包含文档。SKILL.md 中给出了常见的包安装命令(pip/poetry);技能本身不会下载或执行任何内容。
凭证需求
未声明必需的环境变量、凭据或配置路径。部分示例在回调样例中读取环境变量(os.getenv),这是 app-config 样例的预期行为,并非实际技能要求。
持久化与权限
始终为 false,且该 skill 仅为指令型;它不请求持久驻留、不修改其他 skill,也不尝试更改系统/代理配置。
安全有层次,运行前请审查代码。

运行时依赖

无特殊依赖

安装命令

点击复制
官方npx clawhub@latest install django-unfold
镜像加速npx clawhub@latest install django-unfold --registry https://cn.longxiaskill.com

技能文档

Django Unfold Skill Django Unfold 是基于 Tailwind CSS 的 Django 现代后台主题,直接增强 django.contrib.admin——与所有原生 Django 后台模式完全兼容,同时新增 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

# ── 修改表单 UX ─────────────────────────────────────────── 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="Status", ordering="status", label={ "PENDING": "warning", # 橙色 "ACTIVE": "info", # 蓝色 "COMPLETED": "success", # 绿色 "FAILED": "danger", # 红色 }, ) def show_status(self, obj): return obj.status

# 布尔标签,默认颜色 @di

数据来源ClawHub ↗ · 中文优化:龙虾技能库