Customizing Django Admin Like a Pro: Tips & Tricks
Django’s built-in admin panel is very powerful, by customizing Dajngo admin it can supercharge productivity and improve usability. Whether…

Django’s built-in admin panel is very powerful, by customizing Dajngo admin it can supercharge productivity and improve usability. Whether you’re building an internal tool or a full-fledged admin dashboard, these tips & tricks will help you level up your Django Admin skills.
1. Customize the Admin Dashboard Layout
By default, Django Admin lists models in alphabetical order. You can override this and customize the layout.
Create a custom admin index page:
# admin.py
from django.utils.translation import gettext_lazy as _
from django.contrib.admin import AdminSite
from .models import Product, User
# Create custom admin site by overriding AdminSite
class CustomAdminSite(AdminSite):
site_header = "My Custom Admin"
site_title = "Admin Panel"
index_title = "Welcome to My Dashboard"
admin_site = CustomAdminSite(name="custom_admin")
# Now you use admin_site to register your model
admin_site.register(User)
admin_site.register(Product)
2. Customize List Display with Admin Fields
The default Django Admin list view shows only the __str__
representation of a model. You can add more fields, sorting, and filtering.
Example: Show additional columns in list view
# admin.py
from django.contrib import admin
from .models import Product
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
list_display = ('name', 'price', 'stock', 'category', 'updated_at') # display these fields in the admin list view
list_filter = ('category', 'created_at') # filter based on these fields
search_fields = ('name', 'description') # search based on these fields
ordering = ('-updated_at',) # ordering the list
This makes searching and filtering more efficient.
3. Add Inline Editing for Related Models
Instead of switching between models, you can edit related objects directly in the admin panel.
Example: Edit product variants inside the Product admin page
# admin.py
from django.contrib import admin
from .models import Product, Variant
class VariantInline(admin.TabularInline): # or use StackedInline
model = Variant
extra = 1 # Number of empty forms shown for new objects
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
inlines = [VariantInline]
Use TabularInline
for a compact table format and StackedInline
for a stacked form view.
4. Override Form Widgets for Better UI
By default, Django Admin uses basic input fields. You can improve the UI with better widgets.
Example: Use a rich text editor for a description field
# forms.py
from django import forms
from .models import BlogPost
from ckeditor.widgets import CKEditorWidget # Install django-ckeditor
class BlogPostAdminForm(forms.ModelForm):
content = forms.CharField(widget=CKEditorWidget())
class Meta:
model = BlogPost
fields = '__all__'
# admin.py
from .forms import BlogPostAdminForm
from django.contrib import admin
from .models import BlogPost
@admin.register(BlogPost)
class BlogPostAdmin(admin.ModelAdmin):
form = BlogPostAdminForm
This improves usability for fields like descriptions, policies, or documentation.
5. Add Custom Actions for Bulk Updates
You can add custom bulk actions to save time when managing large datasets.
Example: Mark multiple orders as shipped
# admin.py
from django.contrib import admin
def mark_as_shipped(modeladmin, request, queryset):
queryset.update(status='shipped')
mark_as_shipped.short_description = "Mark selected orders as shipped"
@admin.register(Order)
class OrderAdmin(admin.ModelAdmin):
list_display = ('customer', 'product', 'status', 'created_at')
actions = [mark_as_shipped]
This will add an additional action that will perform bulk updates with just a few clicks by updating status maked as “shipped”.
6. Customize Admin Templates for a Unique Look
Django Admin’s default UI is functional but not always visually appealing. You can override templates to change the design.
Example: Customize the base template
- Create a new directory:
templates
- admin
- base_site.html
2. Customize the file:
{% extends "admin/base.html" %}
{% block branding %}
<h1>🚀 My Custom Admin Panel</h1>
{% endblock %}
You can also change CSS styles by overriding admin/base.html
.
7. Use Django Suit or Jazzmin for a Better UI
If you want an entirely new UI, consider using Django Suit or Jazzmin.
Install Jazzmin for a modern admin theme:
pip install django-jazzmin
Add "jazzmin"
to INSTALLED_APPS
, and it will automatically style your admin panel.
# settings.py
INSTALLED_APPS = [
"jazzmin",
"django.contrib.admin",
]
8. Optimize Performance with List-Only Fields
If you have thousands of records, loading all fields can be slow. Use list_select_related
and list_prefetch_related
to optimize performance.
Example: Optimize queries in Admin
# admin.py
from django.contrib import admin
from .models import Order
@admin.register(Order)
class OrderAdmin(admin.ModelAdmin):
list_display = ('customer', 'product', 'status')
list_select_related = ('customer', 'product') # Reduces database queries
9. Add Read-Only Fields for Audit Logs
You may want some fields visible but not editable.
Example: Make created_at and last_login read-only
# admin.py
from django.contrib import admin
from .models import User
@admin.register(User)
class UserAdmin(admin.ModelAdmin):
readonly_fields = ('created_at', 'last_login') # Make read-only fields
This ensures that critical fields are protected from accidental edits.
Final Thoughts
Django Admin is powerful out of the box, but with these customizations, you can enhance usability, improve performance, and create a better experience for admins.
Which Django Admin trick is your favorite? Let me know in the comments! 🚀