python / intermediate
Snippet
Django Admin Anpassung mit ModelAdmin Methoden
Djangos Admin-Interface kann durch die ModelAdmin-Klasse umfangreich angepasst werden. Überschreibe get_queryset, um sichtbare Objekte basierend auf Benutzerberechtigungen zu filtern. Überschreibe save_model, um Felder wie created_by bei neuen Objekten automatisch zu setzen. Verwende list_display für benutzerdefinierte Spalten, list_filter für Seitenleisten-Filter und search_fields für globale Suche. Diese Anpassungen machen das Admin sowohl sicher als auch benutzerfreundlich für Content-Manager.
snippet.py
1
from django.contrib import admin\nfrom .models import Article, Author\n\n@admin.register(Article)\nclass ArticleAdmin(admin.ModelAdmin):\n list_display = ('title', 'author', 'status', 'published_date', 'view_count')\n list_filter = ('status', 'published_date', 'author')\n search_fields = ('title', 'content')\n prepopulated_fields = {'slug': ('title',)}\n autocomplete_fields = ['author']\n\n def get_queryset(self, request):\n qs = super().get_queryset(request)\n if request.user.is_superuser:\n return qs\n return qs.filter(author=request.user)\n\n def save_model(self, request, obj, form, change):\n if not change:\n obj.created_by = request.user\n super().save_model(request, obj, form, change)\n\n def view_count(self, obj):\n return f"{obj.views:,} views"\n view_count.short_description = 'Popularity'
django
Erklärung
1
def get_queryset(self, request):
Überschreiben, um Queryset basierend auf Benutzerberechtigungen zu filtern
2
return qs.filter(author=request.user)
Nicht-Superuser sehen nur ihre eigenen Artikel
3
def save_model(self, request, obj, form, change):
Überschreiben, um Logik beim Speichern einer Modell-Instanz hinzuzufügen
4
def view_count(self, obj):
Benutzerdefinierte Methode zur Anzeige eines berechneten Felds in der Listenansicht
5
view_count.short_description = 'Popularity'
Setze menschenlesbare Spaltenüberschrift für benutzerdefinierte Methode