Python Tutorial
Django Admin
The admin is a built-in back office for your models. Create a superuser, register Member, and manage rows in the browser.
Create a Superuser
python manage.py createsuperuserEnter a username, email, and password. Then start the server and open http://127.0.0.1:8000/admin/.
Register the Model
Until you register Member, it will not appear in admin. Edit members/admin.py:
from django.contrib import admin
from .models import Member
class MemberAdmin(admin.ModelAdmin):
list_display = ("firstname", "lastname", "joined_date")
search_fields = ("firstname", "lastname")
list_filter = ("joined_date",)
admin.site.register(Member, MemberAdmin)The decorator form is the same:
@admin.register(Member)
class MemberAdmin(admin.ModelAdmin):
list_display = ("firstname", "lastname", "joined_date")What You Can Do in /admin
- Add, edit, and delete members with a generated form.
- Search and filter from
search_fieldsandlist_filter. - Manage users and groups (Django's auth models are already registered).
list_display_links and ordering
class MemberAdmin(admin.ModelAdmin):
list_display = ("id", "firstname", "lastname")
list_display_links = ("firstname",)
ordering = ("lastname", "firstname")📘 Real-World Deep Dive
Knowing <strong>Django Admin (Django)</strong> well is what turns Django from a curiosity into a daily tool — you'll reach for it in nearly every real project.
Real-Life Scenario
An end-to-end usage of Django Admin that you'd actually see in a data pipeline or analytics notebook.
Real-Life Example
# Create a superuser to access /admin:
python manage.py createsuperuser
# Or provision one non-interactively from env:
DJANGO_SUPERUSER_USERNAME=admin \
DJANGO_SUPERUSER_PASSWORD=secret \
DJANGO_SUPERUSER_EMAIL=admin@example.com \
python manage.py createsuperuser --noinputExpected Output
(no output)Common mistakes
- Forgetting to call
.save()on a model instance after mutation silently persists nothing. - Reading every row with
Model.objects.all()on a 1 M-row table OOMs the worker — use.iterator()for streaming. - Queries inside loops produce N+1 problems — pull related rows with
select_related/prefetch_related. - Treating Django Admin as a black box without reading the docs — the API has subtle defaults that bite when you scale.
🚀 Performance & Best Practices
- Add database indexes (
db_index=TrueorMeta.indexes) on columns used infilter. - Use
cache_pageon read-heavy views and setCONN_MAX_AGEto keep DB connections warm. - Generate migrations with
python manage.py makemigrations --dry-run --verbosity 3and review before committing. - When working with Django, prefer vectorised / batched operations over Python loops.
🧪 Try It Yourself
- Reproduce the snippet on a representative slice of your own data.
- Profile the snippet with
cProfileortimeitand find the single biggest improvement. - Generalise the snippet into a small, reusable function you can drop into future projects.