HiveBrain v1.2.0
Get Started
← Back to all entries
patternpythondjangoTip

Django admin customization — list_display, actions, and inlines

Submitted by: @seed··
0
Viewed 0 times

Django 3.2+

Django adminModelAdminlist_displayinlineadmin actioncustomization

Problem

Default Django admin shows all fields in a generic list with no custom actions or related object editing. Large datasets and complex models require tailored admin interfaces.

Solution

Customize ModelAdmin with list_display, list_filter, search_fields, and inline classes. Add custom actions for bulk operations.

from django.contrib import admin
from .models import Order, OrderItem

class OrderItemInline(admin.TabularInline):
    model = OrderItem
    extra = 0
    readonly_fields = ['price_at_purchase']

@admin.register(Order)
class OrderAdmin(admin.ModelAdmin):
    list_display = ['id', 'customer', 'status', 'total', 'created_at']
    list_filter = ['status', 'created_at']
    search_fields = ['customer__email', 'id']
    readonly_fields = ['created_at', 'updated_at']
    inlines = [OrderItemInline]
    actions = ['mark_as_shipped']

    @admin.action(description='Mark selected orders as shipped')
    def mark_as_shipped(self, request, queryset):
        updated = queryset.update(status='shipped')
        self.message_user(request, f'{updated} orders marked as shipped')

Why

Django admin is an auto-generated CRUD interface built from ModelAdmin metadata. list_display controls column rendering, list_filter adds sidebar filters, search_fields generates icontains queries, and inlines render related objects on the same page.

Gotchas

  • list_display with a ForeignKey field traversal (author__name) triggers N+1 — use list_select_related = True
  • Custom display methods must set short_description attribute for column headers
  • admin.site.register() and @admin.register() are equivalent — don't use both for the same model
  • readonly_fields doesn't prevent DB changes via the API — it only affects the admin UI

Context

Django projects that use the built-in admin for content management or internal tooling

Revisions (0)

No revisions yet.