Verified against: django-unfold 0.104.1 Docs: https://unfoldadmin.com/docs/ , https://github.com/unfoldadmin/django-unfold Dependencies: none. Related: unfold-installation, unfold-modeladmin, unfold-settings, unfold-navigation.
Unfold Core — メンタルモデルとルーティング
目的
Unfold作業のための正しいメンタルモデルを確立します。Unfoldは django.contrib.admin の上に重なるリスタイリング&拡張レイヤー であり、置き換えではありません。Unfoldが行うことはほぼすべて、新しいテンプレート(Tailwind)、設定辞書、および追加のオプトイン機能(アクション、フィルター、タブ、コンポーネント、コマンドパレット)を備えたDjango管理画面です。
以下のレイヤリングルールを内面化したエージェントは、機能を誤って属性付けしたり、Djangoの仕組みと闘ったり、設定をでっち上げたりしません。
レイヤリングルール
すべての機能は、正確に1つのレイヤーに属します。
| レイヤー | カバーする内容 | 例 |
|---|---|---|
[DJANGO] | 標準の管理機構 — Unfoldは見た目のみ変更 | list_display, search_fields, fieldsets, inlines, get_queryset()、has_*_permission、アクションドロップダウン、autocomplete_fields、raw_id_fields、リストページネーション |
[UNFOLD] | 公式Unfold追加機能 — 設定辞書、contribアプリ、デコレーター、コンポーネント、ミックスイン | UNFOLD = {...}、unfold.admin.ModelAdmin、@display、@action、unfold.contrib.filters、UnfoldModelAdminViewMixin、BaseComponent、InfinitePaginator、actions_list/row/detail/submit_line、タブ、コマンドパレット |
[CUSTOM] | エージェントが記述するプロジェクトレベルのコード | templates/admin/index.html オーバーライド、Tailwindビルド、フォームを含むカスタムビュー、サービス/クエリセットレイヤー、カスタムコンポーネント |
[STUDIO] | 有料Unfold Studioプラグイン機能 | ボックスレイアウト、固定ヘッダー、最小限のサイドバー、強制ダークサイドバー、バナー、ネストナビゲーション、ダッシュボードテンプレート。公開API相当については unfold-studio スキルを参照。 |
ルール:機能はそれを提供する 最下層のレイヤー に属性付けます。プレーンなDjangoでできるなら、プレーンなDjangoを推奨します。
ルーティングテーブル(どのニーズにどのメカニズム)
| ユーザーの要望 | メカニズム | スキル |
|---|---|---|
| モデルのCRUD | ModelAdmin(Django) | unfold-modeladmin |
| 選択行の一括操作 | actions(Djangoドロップダウン)またはUnfold actions_list | unfold-actions |
| リストから1行に対する操作 | actions_row | unfold-actions |
| 詳細ページから1オブジェクトに対する操作 | actions_detail | unfold-actions |
| 変更フォーム上の追加保存モードボタン | actions_submit_line | unfold-actions |
| アクション前の確認ダイアログ | @action(dialog={...}) | unfold-actions |
| 変更リストのフィルター/サイドパネル | list_filter(+ Unfoldフィルタークラス) | unfold-filters |
| 変更リストの検索ボックス | search_fields(Django) | unfold-modeladmin |
| グローバルブランド/タイトル/ロゴ | UNFOLD 設定 | unfold-settings |
| アイコン/バッジ付きサイドバーメニュー | UNFOLD["SIDEBAR"] | unfold-navigation |
| 変更リスト/変更フォーム上部の追加タブ | UNFOLD["TABS"] | unfold-tabs |
| 変更フォーム内のタブ | fieldsetsの "tab" クラス、インラインの tab = True | unfold-tabs |
| 非CRUDページ(分析、ウィザード) | カスタム管理ビュー(UnfoldModelAdminViewMixin) | unfold-custom-pages |
| カード/チャート付き管理ランディングページ | DASHBOARD_CALLBACK + templates/admin/index.html オーバーライド、またはカスタムページ | unfold-dashboard |
| 変更フォームの関連オブジェクト | inlines(Django;Unfoldベースクラス) | unfold-inlines |
| 変更フォームのフィールドグループ化 | fieldsets(Django;Unfoldはタブクラスを追加) | unfold-modeladmin, unfold-tabs |
| コンパクトな繰り返しフィールドリスト | ArrayWidget | unfold-fields |
| リッチテキスト編集 | WysiwygWidget | unfold-fields |
| ビジュアルカラー/テーマ変更 | UNFOLD["COLORS"]、BORDER_RADIUS、THEME | unfold-theming |
| 設定を超えたビジュアル変更 | Tailwind/テンプレートオーバーライド | unfold-tailwind |
| 巨大テーブルの遅いページネーション | InfinitePaginator | unfold-performance |
| cmd+Kパレットのモデルデータ | UNFOLD["COMMAND"] | unfold-navigation |
| 変更リスト行の関連レコードテーブル(展開可能) | list_sections(TableSection/TemplateSection使用) | unfold-modeladmin |
| 変更フォーム上のセカンダリ変更リスト | change_form_datasets(BaseDataset) | unfold-modeladmin |
設定では不十分な場合(カスタム実装が必要):
- フォーム+POSTを伴うアクションダイアログ以外のもの → カスタムページ(
unfold-custom-pages)。 - コンポーネントよりもリッチなダッシュボード → ダッシュボードテンプレートオーバーライド+Tailwind(
unfold-dashboard)。 - 設定として公開されていない視覚効果 → Tailwind CSSまたはテンプレートオーバーライド(
unfold-tailwind、unfold-studio)。 - 単純な変更を超えるビジネスロジック → サービスレイヤー、ModelAdminメソッドは使わない(
unfold-production)。
ゴールデンルール
- すべての管理クラスは
unfold.admin.ModelAdminを継承する必要があります(すべてのインラインはunfold.admin.TabularInline/StackedInlineを継承)。そうしないと、ページはスタイルなしでレンダリングされます。サードパーティのModelAdminはUnfoldベースで再登録が必要です。 "unfold"はINSTALLED_APPSでdjango.contrib.adminの 前に 置きます。Contribアプリ(unfold.contrib.filters、unfold.contrib.forms、unfold.contrib.inlines)はその直後に置きます。- Unfoldは管理URL、テンプレートパス(
admin/base_site.htmlの拡張は動作します)、Djangoの権限機構を置き換えません — 拡張し、闘わないでください。 - Unfoldの内部(ドキュメント化されたコンポーネント以外のテンプレート名、プライベートテンプレートタグ)をハードコードしないでください。ドキュメント化された設定/クラスのみを使用します。
- ビジネスロジックはModelAdminに置きません。ModelAdminはサービスレイヤー上のHTTP/権限レイヤーです。
unfold-productionを参照してください。 - Unfoldは急速に変化します。予期しない動作が発生した場合は、デバッグを深くする前に
docs/version-notes.mdと最新のドキュメントを確認してください。
バージョン情報(確認済み)
- 現在のPyPIリリース:
0.104.1(このスイートはこれに対して確認済み)。 - 要件:Python ≥3.12、Django ≥5.2(
requires_dist: django>=5.2)。 - 0.56.0以降Tailwind v4(v3カスタムスタイルシートが壊れました)。
- Unfoldはデフォルト管理画面と共存可能。段階的な導入もOK。
関連スキル
セットアップタスクには unfold-installation をロードしてください。その他は上記のテーブルからルーティングされます。