Subjects

All subjects Django Java Python React Spring Boot JavaScript PHP
Sign Up Free
Interview question

What is Django Admin Panel and how do you customize it? Django Admin Panel क्या है और इसे customize कैसे करते हैं?

Answer

Django Admin is an auto-generated CRUD interface for managing database records. Register models in admin.py to expose them. Customize with ModelAdmin to control display, filtering, search, and actions without writing additional code.

// admin.py - Basic Setup
from django.contrib import admin
from .models import Product, Category

// Register model with default admin
admin.site.register(Product)
admin.site.register(Category)

// Customized Admin
from django.contrib.admin import ModelAdmin, register
from django.utils.html import format_html

@register(Product)
class ProductAdmin(ModelAdmin):
    # Display fields in list view
    list_display = ['id', 'name', 'category', 'price', 'quantity', 'status_display', 'created_at']
    
    # Add search
    search_fields = ['name', 'description', 'category__name']
    
    # Add filters
    list_filter = ['category', 'is_active', 'created_at']
    
    # Fields to edit inline
    readonly_fields = ['created_at', 'updated_at', 'color_preview']
    
    # Organize edit form
    fieldsets = (
        ('Product Information', {
            'fields': ('name', 'description', 'category')
        }),
        ('Pricing & Inventory', {
            'fields': ('price', 'quantity')
        }),
        ('Status & Metadata', {
            'fields': ('is_active', 'created_by', 'created_at', 'updated_at'),
            'classes': ('collapse',)  # Collapsible section
        }),
    )
    
    # Inline editing for related objects
    class ProductImageInline(admin.TabularInline):
        model = ProductImage
        extra = 1  # How many empty forms to show
    
    inlines = [ProductImageInline]
    
    # Pagination
    list_per_page = 50
    
    # Sort by default
    ordering = ['-created_at']
    
    # Custom methods for display
    def status_display(self, obj):
        color = 'green' if obj.is_active else 'red'
        status = 'Active' if obj.is_active else 'Inactive'
        return format_html(
            '<span style="color: {};">{}</span>',
            color, status
        )
    status_display.short_description = 'Status'
    
    def color_preview(self, obj):
        return format_html(
            '<div style="width:50px;height:50px;background-color:{}"></div>',
            obj.color_code
        )
    color_preview.short_description = 'Color Preview'
    
    # Custom actions
    def make_active(self, request, queryset):
        updated = queryset.update(is_active=True)
        self.message_user(request, f'{updated} products activated')
    make_active.short_description = 'Mark selected as active'
    
    def make_inactive(self, request, queryset):
        queryset.update(is_active=False)
    make_inactive.short_description = 'Mark selected as inactive'
    
    actions = ['make_active', 'make_inactive']
    
    # Override save method
    def save_model(self, request, obj, form, change):
        if not change:  # New object
            obj.created_by = request.user
        super().save_model(request, obj, form, change)
    
    # Custom queryset for non-superusers
    def get_queryset(self, request):
        qs = super().get_queryset(request)
        if not request.user.is_superuser:
            qs = qs.filter(created_by=request.user)
        return qs

// Admin site customization
from django.contrib import admin

admin.site.site_header = 'My Store Administration'
admin.site.site_title = 'My Store Admin'
admin.site.index_title = 'Welcome to Admin Panel'

// Access admin
// 1. Create superuser
python manage.py createsuperuser

// 2. Navigate to http://localhost:8000/admin/

// Common ModelAdmin options
// list_display - Columns in list
// search_fields - Searchable fields
// list_filter - Sidebar filters
// readonly_fields - Non-editable fields
// fieldsets - Form organization
// inlines - Related object editing
// list_per_page - Pagination
// ordering - Default sort
// actions - Bulk actions
Django Admin Panel:

Setup करना:
1. Model register करना admin.py में
2. python manage.py createsuperuser
3. /admin/ पर login करना

Customization:

list_display - क्या columns दिखाने हैं
search_fields - Search functionality
list_filter - Sidebar filters
readonly_fields - Non-editable fields
fieldsets - Form sections
inlines - Related editing

Actions:
Bulk operations करना
Custom actions define करना

Models के साथ:
ModelAdmin class बनाना
@register decorator
Methods override करना

Advanced:
Custom colors/icons
Inline editing
Permissions
User-specific filtering

Benefits:
- Code नहीं लिखना पड़ता
- CRUD ready
- Secure by default
- User management built-in

Was this answer clear?