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가 하는 거의 모든 것은 Django 관리자에 새로운 템플릿(Tailwind), 설정 딕셔너리, 추가 옵트인 기능(액션, 필터, 탭, 컴포넌트, 명령 팔레트)을 더한 것입니다.
아래 계층 규칙을 내재화한 에이전트는 기능을 잘못 지정하거나 Django 메커니즘과 충돌하거나 설정을 임의로 만들지 않습니다.
계층 규칙
모든 기능은 정확히 하나의 계층에 속합니다:
| 계층 | 다루는 내용 | 예시 |
|---|---|---|
[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 |
| 목록에서 한 행에 대한 작업 | actions_row | unfold-actions |
| 상세 페이지에서 한 객체에 대한 작업 | 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" 클래스, inline 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 with 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는 기본 관리자와 함께 작동하며 점진적 도입이 가능합니다.
관련 기술
설치 작업은 unfold-installation을 로드하세요. 그 외 모든 것은 위 라우팅 테이블을 따릅니다.