📋 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_displayinModelAdmin - 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_displayconcise (3–5 fields max) - ✅ Always use
short_descriptionfor 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_displaycustomizes 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 :
