from django.contrib import admin from django.contrib.auth.admin import UserAdmin as BaseUserAdmin from django.contrib.auth.models import User from django.utils.translation import gettext_lazy as _ from .models import Musician class MusicianInline(admin.StackedInline): """Inline admin for Musician model attached to User.""" model = Musician can_delete = False verbose_name_plural = _("musician profile") verbose_name = _("musician profile") fieldsets = ( ( _("Images"), { "fields": ("image", "small_image"), "classes": ("collapse",), }, ), ( _("Contact"), { "fields": ("phone_home", "phone_mobile", "phone_work"), }, ), ( _("Address"), { "fields": ("street", "city", "zip_code"), }, ), ( _("Details"), { "fields": ("instrument", "birthday", "position", "public_description"), }, ), ) class CustomUserAdmin(BaseUserAdmin): """Extended User admin with Musician inline.""" inlines = (MusicianInline,) list_display = ( "username", "email", "first_name", "last_name", "is_staff", "get_instrument", ) list_select_related = ("musician",) @admin.display(description=_("Instrument")) def get_instrument(self, obj): try: return obj.musician.get_instrument_display() except Musician.DoesNotExist: return "-" @admin.register(Musician) class MusicianAdmin(admin.ModelAdmin): """Admin configuration for Musician model.""" list_display = ( "user", "instrument", "phone_mobile", "city", "position", ) list_filter = ("instrument",) search_fields = ( "user__username", "user__first_name", "user__last_name", "city", "phone_mobile", ) readonly_fields = ("user",) ordering = ("position", "user__username") fieldsets = ( ( None, { "fields": ("user", "instrument", "position"), }, ), ( _("Images"), { "fields": ("image", "small_image"), "classes": ("collapse",), }, ), ( _("Contact Information"), { "fields": ("phone_home", "phone_mobile", "phone_work"), }, ), ( _("Address"), { "fields": ("street", "city", "zip_code"), }, ), ( _("Personal"), { "fields": ("birthday", "public_description"), "classes": ("collapse",), }, ), ) # Re-register UserAdmin with Musician inline admin.site.unregister(User) admin.site.register(User, CustomUserAdmin)