Browse Source

Enhance Hadis and Transmitters Admin Interfaces with Thumbnail Support

- Updated HadisCollectionAdmin and TransmittersAdmin to include a custom display header with thumbnail images.
- Modified list_display to show the new display_header method for better visual representation.
- Added thumbnail field to HadisCollection and Transmitters models, replacing FilerImageField with ImageField for improved image handling.
- Created a migration to alter the thumbnail fields in the database schema.
master
Mohsen Taba 4 months ago
parent
commit
cdb695b150
  1. 25
      apps/hadis/admin/hadis.py
  2. 24
      apps/hadis/admin/transmitter.py
  3. 32
      apps/hadis/migrations/0004_alter_hadiscollection_thumbnail_and_more.py
  4. 10
      apps/hadis/models/hadis.py
  5. 9
      apps/hadis/models/transmitter.py

25
apps/hadis/admin/hadis.py

@ -747,7 +747,7 @@ class HadisInCollectionInline(TabularInline):
class HadisCollectionAdmin(ModelAdmin):
"""Admin for HadisCollection model"""
form = HadisCollectionAdminForm
list_display = ('get_title_display', 'slug', 'status', 'order', 'created_at')
list_display = ('display_header','get_title_display', 'slug', 'status', 'order', 'created_at')
list_filter = ('status', 'created_at')
search_fields = ('title', 'slug', 'summary')
readonly_fields = ('slug', 'created_at', 'updated_at')
@ -756,7 +756,7 @@ class HadisCollectionAdmin(ModelAdmin):
fieldsets = (
(None, {
'fields': ('title', 'slug', 'summary', 'status', 'order')
'fields': ('title', 'slug', 'summary', 'status', 'order','thumbnail')
}),
(_('Timestamps'), {
'fields': ('created_at', 'updated_at'),
@ -776,6 +776,27 @@ class HadisCollectionAdmin(ModelAdmin):
return first_item.get('text', '-')
return '-'
@display(description=_("Collection"), header=True)
def display_header(self, obj):
from django.templatetags.static import static
# Get thumbnail image path - use article's thumbnail if available, otherwise use default
thumbnail_path = obj.thumbnail.url if obj.thumbnail else None
return [
self.get_title_display(obj),
None,
None,
{
"path": thumbnail_path,
"height": 30,
"width": 50,
"borderless": True,
# "squared": True,
},
]
class HadisInCollectionAdmin(ModelAdmin):
"""Admin for HadisInCollection model"""

24
apps/hadis/admin/transmitter.py

@ -126,7 +126,7 @@ class TransmittersAdminForm(forms.ModelForm):
class TransmittersAdmin(ModelAdmin):
"""Admin for Transmitters model"""
form = TransmittersAdminForm
list_display = ('get_full_name_display', 'birth_year_hijri', 'death_year_hijri')
list_display = ('display_header', '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')
@ -134,7 +134,7 @@ class TransmittersAdmin(ModelAdmin):
fieldsets = (
(None, {
'fields': ('full_name', 'birth_year_hijri', 'death_year_hijri','known_as','nickname')
'fields': ('full_name', 'birth_year_hijri', 'death_year_hijri','known_as','nickname','thumbnail')
}),
(_('Additional Information'), {
'fields': ('description','origin','lived_in','died_in','kunya'),
@ -157,6 +157,26 @@ class TransmittersAdmin(ModelAdmin):
return first_item.get('text', '-')
return '-'
@display(description=_("Transmitter"), header=True)
def display_header(self, obj):
from django.templatetags.static import static
# Get thumbnail image path - use article's thumbnail if available, otherwise use default
thumbnail_path = obj.thumbnail.url if obj.thumbnail else None
return [
self.get_full_name_display(obj),
None,
None,
{
"path": thumbnail_path,
"height": 30,
"width": 50,
"borderless": True,
# "squared": True,
},
]
class HadisTransmitterAdmin(ModelAdmin):
"""Admin for HadisTransmitter model"""

32
apps/hadis/migrations/0004_alter_hadiscollection_thumbnail_and_more.py

@ -0,0 +1,32 @@
# Generated by Django 4.2.27 on 2026-01-24 10:32
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("hadis", "0003_booksubjectarea_booktype_hadisstatus_description_and_more"),
]
operations = [
migrations.AlterField(
model_name="hadiscollection",
name="thumbnail",
field=models.ImageField(
blank=True,
help_text="image allowed",
null=True,
upload_to="hadis/collection_thumbnails/",
),
),
migrations.AlterField(
model_name="transmitters",
name="thumbnail",
field=models.ImageField(
blank=True,
help_text="image allowed",
null=True,
upload_to="hadis/transmitter_thumbnails/",
),
),
]

10
apps/hadis/models/hadis.py

@ -5,7 +5,6 @@ from django.db.models import F, ForeignKey
from django.utils.translation import gettext_lazy as _
from django.conf import settings
from django.utils.text import slugify
from filer.fields.image import FilerImageField
from .reference import BookReference
from utils.slug import generate_smart_slug
@ -15,14 +14,7 @@ class HadisCollection(models.Model):
summary = models.JSONField(default = list , verbose_name=_('Summary'))
status = models.BooleanField(default=True, verbose_name=_('status'))
order = models.IntegerField(default=0, verbose_name=_('order'))
thumbnail = FilerImageField(
related_name="+",
on_delete=models.CASCADE,
help_text=_('thumbnail image'),
null=True,
blank=True,
verbose_name=_('thumbnail')
)
thumbnail = models.ImageField(upload_to='hadis/collection_thumbnails/', null=True, blank=True, help_text=_('image allowed'))
created_at = models.DateTimeField(auto_now_add=True, verbose_name=_('created at'))
updated_at = models.DateTimeField(auto_now=True, verbose_name=_('updated at'))

9
apps/hadis/models/transmitter.py

@ -3,7 +3,6 @@
from tabnanny import verbose
from django.db import models
from django.utils.translation import gettext_lazy as _
from filer.fields.image import FilerImageField
from django.utils.text import slugify
from typing import Optional
from utils.slug import generate_smart_slug
@ -215,13 +214,7 @@ class Transmitters(models.Model):
# Additional Information
description = models.JSONField(default = list , verbose_name=_('Description'))
thumbnail = FilerImageField(
related_name="+",
on_delete=models.CASCADE,
help_text=_('image allowed'),
null=True,
blank=True
)
thumbnail = models.ImageField(upload_to='hadis/transmitter_thumbnails/', null=True, blank=True, help_text=_('image allowed'))
created_at = models.DateTimeField(auto_now_add=True, verbose_name=_('created at'))
updated_at = models.DateTimeField(auto_now=True, verbose_name=_('updated at'))

Loading…
Cancel
Save