Djangocon EU: is it time for a Django admin rewrite? If so, how? - Emma Delescolle¶
(One of my summaries of the 2026 Djangocon EU in Athens).
One of Django’s “batteries included” batteries is the admin interface. It is great. With a few lines you get Full CRUD, plus filtering, searching and pagination. But it isn’t perfect:
Want drag/drop ordering?
Nested inlines?
An extra button next to “edit” and “delete”?
Form layout with columns?
change_list_viewandchange_form_vieware hard to extend.Better translation support?
(There are plug-ins for most of the individual issues.)
The admin actually predates most of the rest of Django. It has stagnated even though Django got many new features. The admin is a separate framework within django. Lots of patterns from regular Django views don’t apply. You’re missing musle memory when working on the admin.
The community knows there’s a problem. 30% of new proposed fixes are for the admin. There’s discussion about a new UI. And there’s issue #70 that proposes a change. The community has also been trying:
django-admin2. Abandoned at the moment.
Grapelli/Jet. Mostly better skins and extensions on top of the regular admin.
Wagtail. It is actually a CMS, but people are using its admin interface for Django itself.
drf-schema-adapter. Her own attempt via django restframework and a frontend app.
What do we want?
Extendable.
Composable.
Django native.
Pluggable.
So: what if your admin was just regular Django code? Build it on django’s generic views: one way to do CRUD, not two. Everything is composable with views, permissions and actions. Plugins will be first-class, not an afterthought. And: you get familiar patterns, your regular Django muscle memory applies.
Django’s class based views as the basis. ListView, CreateView, UpdateView, DeleteView.
UI layer for breadcrumbs, column headers, dashboard, sidebar.
Permissions and actions layer.
Plugin system. She used djp/pluggy.
A bit of glue: view factories (idea taken from django-admin2). The factory composes the admin page for you.
The project is here: django admin deux.
The current admin.py syntax still works, apart from a change in the import
statements. But it has extras like a layout attribute on admin objects that you can
use to adjust the page.
The admin generates its own documentation. Especially when you use many plugins, the generated documentation is great for figuring out what is happening and which part of the mechanism is responsible for what.
You can try it without risk, admin-deux and the regular admin can run side-by-side. Within nine months the core of the admin and the most important plugins can be finished and made completely robust. And within two years it could be in widespread use and integrated in the community. (There’s a need for funding).
Unrelated photo explanation: a trip in November to the Mosel+Eifel region in Germany. Windsborn crater lake near Bettenfeld. One of the very few vulcano craters filled with water north of the Alps. Beautiful in its autumn colors.