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 actionsDjango 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-inWas this answer clear?