Django Admin – Set Fields to Display

Last updated 1 month, 2 weeks ago | 119 views 75     5

Tags:- Python Django

The Django Admin Interface provides an out-of-the-box dashboard to manage models. However, it shows only a few default fields in the list view. To make it more useful, you can customize which fields are displayed, how they are formatted, and how they are grouped.

This article explains how to:

  • Set list view fields (list_display)

  • Show fields in detail/edit view (fields, fieldsets)

  • Add readonly fields

  • Use custom methods in list display

  • Tips and common mistakes


Field Display Locations in Django Admin

Django Admin allows field customization in three main areas:

Context Field Setting Description
List View list_display Columns shown in the model list page
Edit/Add Form fields or fieldsets Fields shown when adding or editing an item
Read-only readonly_fields Fields shown but not editable

Setting Fields in the List View with list_display

The list_display attribute in a ModelAdmin class controls which fields are shown in the list view.

Example

# blog/admin.py

from django.contrib import admin
from .models import Post

class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'author', 'published', 'created_at')

admin.site.register(Post, PostAdmin)

You Can Also Use:

  • Foreign key fields (e.g., author)

  • Date/time fields

  • Boolean fields

  • Custom methods (e.g., def short_title(self): return ...)


Using Custom Methods in list_display

You can define custom methods on your admin class or model and use them as columns.

class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'short_content')

    def short_content(self, obj):
        return obj.content[:50] + '...' if len(obj.content) > 50 else obj.content

    short_content.short_description = 'Preview'

Setting Fields in the Form View with fields

Use fields to explicitly define the order and appearance of fields in the create/edit form.

class PostAdmin(admin.ModelAdmin):
    fields = ('title', 'content', 'published')

Group Fields with fieldsets

Use fieldsets for more structured and labeled sections.

class PostAdmin(admin.ModelAdmin):
    fieldsets = (
        ('Main Info', {'fields': ('title', 'content')}),
        ('Publication', {'fields': ('published', 'created_at')}),
    )

Set Fields as Read-Only

Use readonly_fields to make fields visible but non-editable in the admin.

class PostAdmin(admin.ModelAdmin):
    readonly_fields = ('created_at', 'updated_at')

Common use cases:

  • Auto-generated timestamps

  • Calculated values


✅ Summary of Admin Field Options

Attribute Use Case
list_display Show fields in the object list view
fields Simple form layout
fieldsets Structured form layout with sections
readonly_fields Display data without allowing edits

Complete Example

models.py

from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=200)
    body = models.TextField()
    author = models.CharField(max_length=100)
    published = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

admin.py

from django.contrib import admin
from .models import Article

class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title', 'author', 'published', 'created_at')
    readonly_fields = ('created_at', 'updated_at')
    fields = ('title', 'body', 'author', 'published', 'created_at', 'updated_at')

admin.site.register(Article, ArticleAdmin)

Tips

  • Use short_description to customize column headers for custom methods.

  • list_display_links can specify which field(s) in list_display are clickable.

  • list_editable allows inline editing for fields in list view (except those in list_display_links).

  • Keep list_display minimal (3–5 fields) to avoid clutter.


⚠️ Common Pitfalls

Problem Fix
list_display field causes error Ensure the field exists or method returns a value
ForeignKey not displaying correctly Use __str__() in the related model
Read-only fields not updating Remember readonly_fields only disables editing; the model must update the field programmatically
Setting fields but not in the correct order Use fields or fieldsets to control ordering

Conclusion

Customizing which fields are displayed in the Django Admin improves usability, speeds up data entry, and reduces errors. By mastering list_display, fields, readonly_fields, and fieldsets, you can tailor the admin to your app’s needs with minimal effort.