129 lines
3.0 KiB
Python
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)
|