📋 Django Set List Display – Customize Admin Table Columns (2025 Guide)
🧲 Introduction – What Is list_display
in Django?
In Django Admin, the list_display
option allows you to customize which fields are shown as columns in the model list view. This makes it easier to quickly scan and manage data from the admin panel by displaying meaningful fields.
🎯 In this guide, you’ll learn:
- How to use
list_display
inModelAdmin
- How to show related model fields
- How to use custom methods as columns
- Best practices for admin usability
🧱 Step 1: Example Model
models.py
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
published = models.DateTimeField(auto_now_add=True)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
def __str__(self):
return self.title
⚙️ Step 2: Use list_display
in Admin
admin.py
from django.contrib import admin
from .models import Post
class PostAdmin(admin.ModelAdmin):
list_display = ('id', 'title', 'category', 'published')
admin.site.register(Post, PostAdmin)
✅ Your admin panel will now show:
ID | Title | Category | Published
🔗 Step 3: Add Custom Methods in list_display
You can define methods in the ModelAdmin
or the model itself to be used in the list display.
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'short_content', 'published')
def short_content(self, obj):
return obj.content[:50] + '...'
short_content.short_description = 'Preview'
🔍 Step 4: Add Fields from Related Models
Display related model fields using ForeignKey
:
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'get_category')
def get_category(self, obj):
return obj.category.name
get_category.short_description = 'Category'
✅ Best Practices
- ✅ Keep
list_display
concise (3–5 fields max) - ✅ Always use
short_description
for custom method columns - ✅ Show identifiers (like
id
,title
) first for quick scanning - ✅ Use read-only or calculated fields to avoid clutter in form views
📌 Summary – Recap & Next Steps
🔍 Key Takeaways:
list_display
customizes which columns appear in the Django admin table- You can show model fields, foreign keys, or custom methods
- Improves data visibility and usability for administrators
⚙️ Real-World Relevance:
Ideal for managing blog posts, users, products, orders, and any model with structured, tabular data in the Django admin dashboard.
❓ Frequently Asked Questions (FAQ)
❓ Can I sort by a list_display
column?
✅ Yes. Fields in list_display
are sortable by default—unless they are custom methods.
❓ How do I make a custom method sortable?
🟡 You can’t directly—only database fields are sortable. You can define annotated fields in QuerySets or use admin_order_field
.
❓ Can I show a Boolean as a toggle/symbol?
✅ Yes. Use boolean = True
in your method:
def is_recent(self, obj):
return obj.published.year == timezone.now().year
is_recent.boolean = True
❓ How do I show an image or link?
✅ Use mark_safe
:
from django.utils.safestring import mark_safe
def thumbnail(self, obj):
return mark_safe(f'<img src="{obj.image.url}" width="50"/>')
❓ Can I hide fields from the form but show them in list_display?
✅ Yes. Use readonly_fields
or exclude them with fields
.
Share Now :