4️⃣ 🛠️ Django Admin Interface
Estimated reading: 3 minutes 29 views

📋 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 in ModelAdmin
  • 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 :

Leave a Reply

Your email address will not be published. Required fields are marked *

Share

Django Set List Display

Or Copy Link

CONTENTS
Scroll to Top