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
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)
|