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') 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', 'created_at') list_filter = ( 'created_at',) search_fields = ('hadis__title', 'transmitter__full_name') readonly_fields = ('created_at',) ordering = ('hadis', 'order') fieldsets = ( (None, { 'fields': ('hadis', 'transmitter', 'order') }), (_('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)