Django Admin Interface
One of Django's most impressive features is the built-in Admin Panel. It is a ready-made, secure web interface that lets you add, edit, view, and delete your database records directly from the browser — without writing a single extra line of code.
What is the Django Admin Panel?
The Django Admin Panel is an automatic management dashboard that Django builds for you. Once you register your models, the admin panel displays them in a clean, organized interface where you can manage all your data.
Example: Think of the admin panel as the back office of a shop. Customers only see the shop's display (your website). But behind the scenes, the manager (admin) can log in to the back office and see all the stock, add new items, edit prices, or remove discontinued products — all from one easy interface.
Accessing the Admin Panel
The admin panel is available at /admin/ by default. Run your server and visit:
http://127.0.0.1:8000/admin/
You will see a login page asking for a username and password.
Creating a Superuser
To log into the admin panel, you need a superuser account. A superuser has full access to everything in the admin panel. Create one using this command:
python manage.py createsuperuser
Django will ask you a few questions:
Username: admin
Email address: admin@myschool.com
Password: ********
Password (again): ********
Superuser created successfully.
Now log in at http://127.0.0.1:8000/admin/ with these credentials.
Example: Creating a superuser is like setting up the master key for a building. The superuser can open every room (manage every model). Regular users may only be allowed into certain rooms.
Registering a Model in admin.py
By default, your custom models do not appear in the admin panel. You must register them in school/admin.py:
from django.contrib import admin
from .models import Student
admin.site.register(Student)
Now refresh the admin panel and you will see a "Students" section where you can add, edit, view, and delete student records.
Registering Multiple Models
from django.contrib import admin
from .models import Student, Classroom, Subject
admin.site.register(Student)
admin.site.register(Classroom)
admin.site.register(Subject)
Customizing the Admin Display
By default, the admin panel shows a plain list of records like "Student object (1)". You can customize how records look using a ModelAdmin class.
Showing specific columns in the list
from django.contrib import admin
from .models import Student
class StudentAdmin(admin.ModelAdmin):
list_display = ('name', 'age', 'grade', 'email') # Show these columns
admin.site.register(Student, StudentAdmin)
Now the admin list shows a clean table with Name, Age, Grade, and Email columns instead of the default "Student object (1)" text.
Adding a Search Bar
class StudentAdmin(admin.ModelAdmin):
list_display = ('name', 'age', 'grade', 'email')
search_fields = ('name', 'email') # Allow searching by name or email
Adding Filters on the Side
class StudentAdmin(admin.ModelAdmin):
list_display = ('name', 'age', 'grade', 'email')
list_filter = ('grade', 'is_active') # Add filter sidebar
Example: The customized admin is like upgrading from a plain notebook to a proper spreadsheet with columns, filters, and a search bar. Both contain the same data, but one is much easier to work with.
Making Fields Editable in the List View
class StudentAdmin(admin.ModelAdmin):
list_display = ('name', 'age', 'is_active')
list_editable = ('is_active',) # Edit this field directly in the list
Organizing the Edit Form with fieldsets
class StudentAdmin(admin.ModelAdmin):
fieldsets = (
('Personal Info', {
'fields': ('name', 'age', 'email')
}),
('Academic Info', {
'fields': ('grade', 'classroom')
}),
)
Example: Fieldsets are like sections on a paper form. Instead of showing all 15 fields in a messy single block, you group them into neat sections: "Personal Info" and "Academic Info" — much easier to fill in and manage.
Using the @admin.register Decorator
There is a cleaner, modern way to register models using the @admin.register decorator instead of calling admin.site.register():
from django.contrib import admin
from .models import Student
@admin.register(Student)
class StudentAdmin(admin.ModelAdmin):
list_display = ('name', 'age', 'grade', 'email')
search_fields = ('name',)
list_filter = ('grade',)
This is shorter and combines the registration and customization in one block.
Admin Site Branding (Optional Customization)
You can change the default "Django administration" header to your own website name. Add these lines to admin.py:
admin.site.site_header = "My School Admin"
admin.site.site_title = "School Portal"
admin.site.index_title = "Welcome to School Management Panel"
Quick Recap
# 1. Create a superuser to log in
python manage.py createsuperuser
# 2. Register your model in school/admin.py
from django.contrib import admin
from .models import Student
@admin.register(Student)
class StudentAdmin(admin.ModelAdmin):
list_display = ('name', 'age', 'email')
search_fields = ('name',)
list_filter = ('grade',)
# 3. Visit the admin panel
# http://127.0.0.1:8000/admin/
