6.1. Admin About

6.1.1. Customizing

  • admin.site.site_title - browser tab title - default: "Django site admin"

  • admin.site.site_header - login box and dashboard (on the blueish background) - default: "Django Administration"

  • admin.site.index_title - app list index header (admin main page) - default: "Site administration"

>>> 
... from django.contrib import admin
... from django.utils.translation import gettext_lazy as _
...
... admin.site.site_title = _('My Administration')
... admin.site.site_header = _('My Project')
... admin.site.index_title = _('Dashboard')

6.1.2. ModelAdmin

  • admin.ModelAdmin

>>> 
... from django.contrib import admin
...
... class CustomerAdmin(admin.ModelAdmin):
...     pass

6.1.3. Registration

  • @admin.register(...)

>>> 
... from django.contrib import admin
... from shop.models import Customer
...
...
... @admin.register(Customer)
... class CustomerAdmin(admin.ModelAdmin):
...     pass

6.1.4. Example

>>> 
... from django.contrib import admin
... from django.utils.translation import gettext_lazy as _
...
...
... @admin.register(Customer)
... class CustomerAdmin(admin.ModelAdmin):
...     ordering = ['lastname', 'firstname']
...     list_display = ['lastname', 'firstname', 'birthdate', 'field_age']
...     list_display_links = ['lastname']
...     search_fields = ['^lastname']
...     list_filter = ['created_date', 'modified_date', 'gender']
...     exclude = ['uuid', 'reporter', 'is_active']
...     readonly_fields = ['created_date', 'modified_date']
...     autocomplete_fields = ['friends']
...     fieldsets = [
...         (_('Personal Data'), {'fields': ['lastname', 'firstname', 'birthdate', 'gender']}),
...         (_('Additional Data'), {'fields': ['email', 'bio', 'image']}),
...         (_('Relations'), {'fields': ['status', 'friends']})]
...     radio_fields = {
...         'gender': admin.HORIZONTAL,
...         'status': admin.VERTICAL}
...
...     def get_list_display(self, request):
...         list_display = super().get_list_display(request)
...         if request.user.is_superuser and 'is_active' not in list_display:
...             list_display.insert(0, 'is_active')
...         return list_display
...
...     def get_queryset(self, request):
...         queryset = super().get_queryset(request)
...         if not request.user.is_superuser:
...             queryset = queryset.filter(is_active=False)
...         return queryset
...
...     @admin.display(description=_('Age'), ordering='birthdate', empty_value=_('Unknown'))
...     def field_age(self, obj):
...         age = obj.get_age()
...         return str(age) if age else ''
...
...     def save_model(self, request, obj, form, change):
...         obj.reporter = request.user
...         super().save_model(request, obj, form, change)
...
...     class Media:
...         js = ['contact/js/alert.js']
...         css = {'all': ['contact/css/style.css']}

6.1.5. Permissions

6.1.6. Users

6.1.7. Groups

6.1.8. Content Types