python / expert
Snippet
Django Admin Erweiterte Anpassung mit ModelAdmin Hooks und List Display
Djangos ModelAdmin Klasse bietet umfangreiche Anpassungshooks für die Admin-Oberfläche. list_display definiert welche Spalten in der Listenansicht erscheinen, einschließlich benutzerdefinierter Methoden die Daten formatieren. list_filter erstellt eine Seitenleiste mit Filteroptionen nach angegebenen Feldern. search_fields ermöglicht globale Suche über angegebene Model- und verknüpfte Felder mit __-Notation für Lookups. readonly_fields markiert Felder als nicht bearbeitbar. fieldsets gruppiert Felder in einklappbare Abschnitte. Benutzerdefinierte Methoden-Attribute wie short_description und admin_order_field steuern Spaltenheader-Anzeige und Sortierverhalten. Die format_html Funktion rendert sicher HTML in Admin-Templates.
snippet.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from django.contrib import adminfrom django.utils.html import format_htmlfrom django.utils import timezone@admin.register(Article)class ArticleAdmin(admin.ModelAdmin):list_display = ('title', 'author_name', 'status_badge', 'created_at', 'word_count_display')list_filter = ('status', 'author', 'created_at')search_fields = ('title', 'content', 'author__name')readonly_fields = ('created_at', 'updated_at', 'word_count_display')date_hierarchy = 'created_at'ordering = ('-created_at',)fieldsets = (('Content', {'fields': ('title', 'slug', 'content', 'summary')}),('Metadata', {'fields': ('author', 'status', 'published_at')}),('System', {'fields': ('created_at', 'updated_at'), 'classes': ('collapse',)}),)def author_name(self, obj):return obj.author.nameauthor_name.short_description = 'Author'author_name.admin_order_field = 'author__name'def status_badge(self, obj):colors = {'draft': '#6c757d', 'published': '#28a745', 'archived': '#dc3545'}return format_html('<span style="background:{};color:white;padding:3px 8px;border-radius:3px">{}</span>',colors.get(obj.status, '#6c757d'), obj.status.upper())status_badge.short_description = 'Status'def word_count_display(self, obj):return f"{len(obj.content.split())} words"word_count_display.short_description = 'Word Count'
django
Erklärung
1
list_display = ('title', 'author_name', 'status_badge', ...)
Definiert Spalten in der Listenansicht; benutzerdefinierte Methoden rendern benutzerdefinierte Spalten
2
list_filter = ('status', 'author', 'created_at')
Erstellt Seitenleisten-Filter-Widgets für angegebene Felder
3
search_fields = ('title', 'content', 'author__name')
Aktiviert Suchleiste; __ ermöglicht Suche über verknüpfte Modellfelder
4
readonly_fields = ('created_at', 'updated_at', 'word_count_display')
Markiert Felder als schreibgeschützt im Bearbeitungsformular
5
fieldsets = (('Content', {'fields': ...}), ...)
Gruppiert Felder in einklappbare Admin-Abschnitte
6
author_name.short_description = 'Author'
Setzt menschenlesbaren Spaltenheader-Text
7
author_name.admin_order_field = 'author__name'
Ermöglicht Sortierung nach verknüpftem Feld author__name
8
format_html(...)
Rendert sicher HTML in Admin ohne XSS-Schwachstellen