Dynamic Django admin panel
OctopusDash is a modern, open-source Django admin dashboard designed with a beautiful UI, powerful filtering, and granular permission control — crafted for developers and teams seeking more flexibility, clarity, and extensibility beyond the default Django admin.
⚡ OctopusDash is actively under development! Contributions, feedback, and feature requests are always welcome.
Modern UI & UX
Advanced Filtering & Search
Granular Permission Control
⚙️ Extensible & Pluggable
🧩 Coming Soon
While Django’s default admin is powerful, it often feels limited and outdated when your projects demand:
OctopusDash addresses these with a fresh design, rich filtering options, and extensible architecture built from the ground up.
Unlike many alternatives, OctopusDash is not just a skin or extension on top of Django’s default admin panel. Instead, it’s built from scratch to support ambitious features like plugins, custom widgets, auto API generation, and more.
This approach allows us to deeply understand Django’s internals while avoiding the constraints and limitations of the default admin — all without sacrificing Django’s powerful template system and generic views.
⚠ Requires Python 3.8+ and Django 4.x+
Install via pip:
pip install octopusdash
Add octopusdash
to your INSTALLED_APPS
:
INSTALLED_APPS = [
'octopusdash',
# ...
]
Include OctopusDash URLs in your project:
from django.urls import path, include
urlpatterns = [
path('octopusdash/', include('octopusdash.urls')),
# ...
]
Add required middlewares:
MIDDLEWARE = [
'octopusdash.middlewares.app.ViewErrorHandlerMiddleware',
'octopusdash.middlewares.authentication.CheckAuthenticationMiddleware',
# ...
]
Configure template context processors:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'octopusdash.context.global_context',
],
},
},
]
Add OctopusDash settings:
OCTOPUSDASH = {
'dashboard_path': '/dashboard',
}
Example of registering your app and model admin:
from octopusdash.contrib import admin as od_admin
from .models import Post
app = od_admin.AppAdmin('home')
class PostAdmin(od_admin.ModelAdmin):
model = Post
list_display = ['title', 'content', 'is_active', 'author']
app.register_to_admin_panel(model_admin=PostAdmin)
Visit /dashboard/
after running the server.
Define custom actions on your model admin:
class PostAdmin(od_admin.ModelAdmin):
model = Post
actions = ['set_to_active']
@od_admin.action(desc="Change post state to active.")
def set_to_active(self, queryset):
for post in queryset:
post.is_active = True
Edit objects directly in the table using Django formsets:
class PostAdmin(od_admin.ModelAdmin):
model = Post
list_display = ('title', 'content', 'author', 'is_active')
list_editable = ('title', 'author', 'is_active')
Note: Fields in list_editable
must be included in list_display
.
manager
: DashboardModelManager instancemodel
: Django modellist_display
: fields to displaylist_editable
: fields editable inlinesearch_fields
: fields to searchfilter_fields
: fields to filterreadonly_fields
: non-editable fieldsform_fields
: fields in create/update view ('__all__'
by default)Note: Do not override methods in
ModelAdmin
as it follows a specific internal pattern.
Documentation is in progress! Explore the code, open issues, and join the discussion.
OctopusDash is open-source under the MIT license.
Contributions, feature requests, and bug reports are welcome.
Please ⭐ star the repo if you find it useful!
Made by husseinnaeemsec