diff --git a/apps/hadis/admin/__init__.py b/apps/hadis/admin/__init__.py index ba8ce70..3e6f70c 100644 --- a/apps/hadis/admin/__init__.py +++ b/apps/hadis/admin/__init__.py @@ -1,3 +1,4 @@ from .category import * from .hadis import * -from .transmitter import * \ No newline at end of file +from .transmitter import * +from .reference import * \ No newline at end of file diff --git a/apps/hadis/admin/reference.py b/apps/hadis/admin/reference.py index 8dd9232..3cc9bf4 100644 --- a/apps/hadis/admin/reference.py +++ b/apps/hadis/admin/reference.py @@ -115,6 +115,26 @@ class BookAuthorAdmin(ModelAdmin): return first.get('text', '-') return '-' +@admin.register(BookReferenceImage) +class BookReferenceImageAdmin(admin.ModelAdmin): + # Display the custom string, plus the raw order and book link for convenience + list_display = ("display_name", "order", "book_reference") + + # optimize database queries since we are accessing foreign key data (book_reference) + list_select_related = ("book_reference",) + + def display_name(self, obj): + # Implements: f"{self.book_reference.title[0]['text']} - Image {self.order}" + try: + # We use safe navigation to prevent admin crashes if data is missing + book_title = obj.book_reference.title[0]['text'] + return f"{book_title} - Image {obj.order}" + except (AttributeError, IndexError, KeyError, TypeError): + # Fallback if the title structure isn't exactly as expected + return f"Unknown Book - Image {obj.order}" + + # Sets the column header name in the admin panel + display_name.short_description = "Image Reference" class BookAttributeAdmin(ModelAdmin): """ @@ -153,4 +173,5 @@ class BookAttributeAdmin(ModelAdmin): project_admin_site.register(BookReference, BookReferenceAdmin) project_admin_site.register(BookAuthor, BookAuthorAdmin) -project_admin_site.register(BookAttribute, BookAttributeAdmin) \ No newline at end of file +project_admin_site.register(BookAttribute, BookAttributeAdmin) +project_admin_site.register(BookReferenceImage, BookReferenceImageAdmin) \ No newline at end of file