From fls
Configure Django admin with Unfold and SiteAwareModelAdmin. Use when creating/modifying admin classes, working with inlines, or when the user mentions admin interface.
npx claudepluginhub preludetech/django-craftThis skill is limited to using the following tools:
Use Unfold instead of default Django admin for all ModelAdmin classes.
Django Unfold admin theme - build, configure, and enhance modern Django admin interfaces with Unfold. Use when working with: (1) Django admin UI customisation or theming, (2) Unfold ModelAdmin, inlines, actions, filters, widgets, or decorators, (3) Admin dashboard components and KPI cards, (4) Sidebar navigation, tabs, or conditional fields, (5) Any mention of 'unfold', 'django-unfold', or 'unfold admin'. Covers the full Unfold feature set: site configuration, actions system, display decorators, filter types, widget overrides, inline variants, dashboard components, datasets, sections, theming, and third-party integrations.
Develops production-grade Django web applications with models, views, ORM queries, authentication systems, and admin interfaces. Use for building web apps, managing databases via Django ORM, and implementing auth.
References 33 Django components with Python 3.10+ and Django 6.0 patterns for implementing, configuring, or troubleshooting Models, QuerySets, Views, Forms, Admin, Auth, Caching, and more.
Share bugs, ideas, or general feedback.
Use Unfold instead of default Django admin for all ModelAdmin classes.
from unfold.admin import ModelAdmin, TabularInline
@admin.register(MyModel)
class MyModelAdmin(ModelAdmin):
...
Use Unfold inlines:
from unfold.admin import TabularInline, StackedInline
# NOT Django's admin.TabularInline
All site-aware models MUST use SiteAwareModelAdmin:
from freedom_ls.site_aware_models.admin import SiteAwareModelAdmin
@admin.register(Topic)
class TopicAdmin(SiteAwareModelAdmin):
list_display = ("title", "subtitle")
# site field automatically excluded
What it does:
site field from formsunfold.admin.ModelAdminLocation: freedom_ls/site_aware_models/admin.py
Rule: Never display or allow editing of site field in admin
For models requiring object-level permissions:
from guardian.admin import GuardedModelAdmin
@admin.register(Cohort)
class CohortAdmin(GuardedModelAdmin):
list_display = ["name"]
search_fields = ["name"]
exclude = ["site"] # Required for site-aware models
Note: GuardedModelAdmin does NOT inherit from SiteAwareModelAdmin, so you must manually exclude = ["site"] for site-aware models.
@admin.register(Model)
class ModelAdmin(SiteAwareModelAdmin):
list_display = ("field1", "field2")
search_fields = ("field1", "field2__related")
list_filter = ("category", "created_at")
readonly_fields = ("slug", "created_at")
exclude = ["site"] # Only if not using SiteAwareModelAdmin
from unfold.admin import TabularInline
class ChildInline(TabularInline):
model = Child
extra = 0
fields = ("field1", "field2")
autocomplete_fields = ["foreign_key"]
@admin.register(Parent)
class ParentAdmin(SiteAwareModelAdmin):
inlines = [ChildInline]
@admin.register(Model)
class ModelAdmin(SiteAwareModelAdmin):
fieldsets = (
(None, {"fields": ("title", "description")}),
("Metadata", {
"fields": ("meta", "tags"),
"classes": ("collapse",)
}),
)
@admin.register(Student)
class StudentAdmin(SiteAwareModelAdmin):
list_display = ["get_full_name", "get_email"]
def get_full_name(self, obj):
return f"{obj.user.first_name} {obj.user.last_name}".strip()
get_full_name.short_description = "Full Name"
get_full_name.admin_order_field = "user__first_name"
SiteAwareModelAdmin for site-aware modelssite field in admin interfaceautocomplete_fields for ForeignKey/M2M to avoid loading all optionsreadonly_fields for auto-generated fields (slug, timestamps)fieldsets to organize complex forms