Files
blechreiz-website/musicians/admin.py

129 lines
3.0 KiB
Python

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)