mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-24 16:51:09 -05:00
- Introduced a comprehensive Secret Management Guide detailing best practices, secret classification, development setup, production management, rotation procedures, and emergency protocols. - Implemented a client-side performance monitoring script to track various metrics including page load performance, paint metrics, layout shifts, and memory usage. - Enhanced search accessibility with keyboard navigation support for search results, ensuring compliance with WCAG standards and improving user experience.
4.1 KiB
4.1 KiB
Admin Interface Overview
This document provides an overview of the Django admin interface architecture for ThrillWiki.
Architecture
The admin interface is built on a layered architecture:
┌─────────────────────────────────────────────────────┐
│ App-Specific Admins │
│ (ParkAdmin, RideAdmin, UserAdmin, etc.) │
├─────────────────────────────────────────────────────┤
│ Mixins │
│ (QueryOptimizationMixin, ExportActionMixin, etc.) │
├─────────────────────────────────────────────────────┤
│ BaseModelAdmin │
│ (Standard settings, base functionality) │
├─────────────────────────────────────────────────────┤
│ django.contrib.admin │
└─────────────────────────────────────────────────────┘
Key Components
Base Classes (apps/core/admin/)
- BaseModelAdmin: Standard settings (pagination, display, ordering)
- Mixins: Reusable functionality (query optimization, export, permissions)
Admin Sites
- Default Admin Site: Full admin access at
/admin/ - Moderation Admin Site: Dedicated moderation interface at
/moderation/
Performance Targets
| View Type | Query Target | Load Time |
|---|---|---|
| List View | < 15 queries | < 500ms |
| Change View | < 20 queries | < 500ms |
| Bulk Actions | < 2 seconds | per 100 records |
Quick Reference
Adding a New Admin
from apps.core.admin import (
BaseModelAdmin,
QueryOptimizationMixin,
ExportActionMixin,
)
class MyModelAdmin(
QueryOptimizationMixin,
ExportActionMixin,
BaseModelAdmin,
):
list_display = ['name', 'related_obj', 'status', 'created_at']
list_select_related = ['related_obj']
list_prefetch_related = ['many_to_many_field']
export_fields = ['id', 'name', 'status']
export_filename_prefix = 'my_model'
Read-Only Admin for Auto-Generated Data
from apps.core.admin import ReadOnlyAdminMixin, BaseModelAdmin
class RankingAdmin(ReadOnlyAdminMixin, BaseModelAdmin):
list_display = ['ride', 'rank', 'calculated_at']
Admin with Moderation Actions
from apps.core.admin import ModerationMixin, BaseModelAdmin
class ReviewAdmin(ModerationMixin, BaseModelAdmin):
moderation_status_field = 'status'
Files Structure
backend/
├── apps/
│ ├── core/
│ │ ├── admin/
│ │ │ ├── __init__.py
│ │ │ ├── base.py
│ │ │ └── mixins.py
│ │ └── admin.py
│ ├── parks/
│ │ └── admin.py
│ ├── rides/
│ │ └── admin.py
│ ├── accounts/
│ │ └── admin.py
│ └── moderation/
│ └── admin.py
└── shared/
└── media/
└── admin.py
docs/admin/
├── overview.md
├── base_classes.md
└── CHANGELOG.md
Best Practices
- Always use BaseModelAdmin as the final parent class
- List mixins before BaseModelAdmin in inheritance order
- Define list_select_related for all ForeignKeys in list_display
- Use prefetch_related for reverse relations and M2M fields
- Add export_fields explicitly for control over exported data
- Include descriptive help text in fieldset descriptions
- Test query counts using Django Debug Toolbar