You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

76 lines
2.5 KiB

from django.contrib import admin
from django.utils.translation import gettext_lazy as _
from unfold.admin import ModelAdmin, TabularInline
from unfold.decorators import display, action
from utils.admin import project_admin_site
from ..models import Transmitters, HadisTransmitter
class HadisTransmitterInline(TabularInline):
"""Inline for HadisTransmitter in Transmitters admin"""
model = HadisTransmitter
extra = 0
fields = ('hadis', 'order', 'status')
readonly_fields = ('created_at',)
class TransmittersAdmin(ModelAdmin):
"""Admin for Transmitters model"""
list_display = ('get_full_name_display', 'birth_year_hijri', 'death_year_hijri')
list_filter = ('birth_year_hijri', 'death_year_hijri')
search_fields = ('full_name', 'description')
readonly_fields = ('created_at', 'updated_at')
inlines = [HadisTransmitterInline]
fieldsets = (
(None, {
'fields': ('full_name', 'birth_year_hijri', 'death_year_hijri')
}),
(_('Additional Information'), {
'fields': ('description',),
'classes': ('collapse',)
}),
(_('Timestamps'), {
'fields': ('created_at', 'updated_at'),
'classes': ('collapse',)
}),
)
@display(description=_('Full Name'), ordering='full_name')
def get_full_name_display(self, obj):
"""
Parses the JSON full_name and returns the first item's text.
"""
if obj.full_name and isinstance(obj.full_name, list) and len(obj.full_name) > 0:
# Safely get the first item
first_item = obj.full_name[0]
if isinstance(first_item, dict):
return first_item.get('text', '-')
return '-'
class HadisTransmitterAdmin(ModelAdmin):
"""Admin for HadisTransmitter model"""
list_display = ('hadis', 'transmitter', 'order', 'status', 'created_at')
list_filter = ('status', 'created_at')
search_fields = ('hadis__title', 'transmitter__full_name')
readonly_fields = ('created_at',)
ordering = ('hadis', 'order')
fieldsets = (
(None, {
'fields': ('hadis', 'transmitter', 'order')
}),
(_('Status Information'), {
'fields': ('status',)
}),
(_('Timestamps'), {
'fields': ('created_at',),
'classes': ('collapse',)
}),
)
# Register models with the custom admin site
project_admin_site.register(Transmitters, TransmittersAdmin)
project_admin_site.register(HadisTransmitter, HadisTransmitterAdmin)