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): class HadisCollectionAdmin(ModelAdmin):
"""Admin for HadisCollection model""" """Admin for HadisCollection model"""
form = HadisCollectionAdminForm 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') list_filter = ('status', 'created_at')
search_fields = ('title', 'slug', 'summary') search_fields = ('title', 'slug', 'summary')
readonly_fields = ('slug', 'created_at', 'updated_at') readonly_fields = ('slug', 'created_at', 'updated_at')
@ -756,7 +756,7 @@ class HadisCollectionAdmin(ModelAdmin):
fieldsets = ( fieldsets = (
(None, { (None, {
'fields': ('title', 'slug', 'summary', 'status', 'order')
'fields': ('title', 'slug', 'summary', 'status', 'order','thumbnail')
}), }),
(_('Timestamps'), { (_('Timestamps'), {
'fields': ('created_at', 'updated_at'), 'fields': ('created_at', 'updated_at'),
@ -776,6 +776,27 @@ class HadisCollectionAdmin(ModelAdmin):
return first_item.get('text', '-') return first_item.get('text', '-')
return '-' 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): class HadisInCollectionAdmin(ModelAdmin):
"""Admin for HadisInCollection model""" """Admin for HadisInCollection model"""

24
apps/hadis/admin/transmitter.py

@ -126,7 +126,7 @@ class TransmittersAdminForm(forms.ModelForm):
class TransmittersAdmin(ModelAdmin): class TransmittersAdmin(ModelAdmin):
"""Admin for Transmitters model""" """Admin for Transmitters model"""
form = TransmittersAdminForm 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') list_filter = ('birth_year_hijri', 'death_year_hijri')
search_fields = ('full_name', 'description') search_fields = ('full_name', 'description')
readonly_fields = ('created_at', 'updated_at') readonly_fields = ('created_at', 'updated_at')
@ -134,7 +134,7 @@ class TransmittersAdmin(ModelAdmin):
fieldsets = ( fieldsets = (
(None, { (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'), { (_('Additional Information'), {
'fields': ('description','origin','lived_in','died_in','kunya'), 'fields': ('description','origin','lived_in','died_in','kunya'),
@ -157,6 +157,26 @@ class TransmittersAdmin(ModelAdmin):
return first_item.get('text', '-') return first_item.get('text', '-')
return '-' 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): class HadisTransmitterAdmin(ModelAdmin):
"""Admin for HadisTransmitter model""" """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.utils.translation import gettext_lazy as _
from django.conf import settings from django.conf import settings
from django.utils.text import slugify from django.utils.text import slugify
from filer.fields.image import FilerImageField
from .reference import BookReference from .reference import BookReference
from utils.slug import generate_smart_slug from utils.slug import generate_smart_slug
@ -15,14 +14,7 @@ class HadisCollection(models.Model):
summary = models.JSONField(default = list , verbose_name=_('Summary')) summary = models.JSONField(default = list , verbose_name=_('Summary'))
status = models.BooleanField(default=True, verbose_name=_('status')) status = models.BooleanField(default=True, verbose_name=_('status'))
order = models.IntegerField(default=0, verbose_name=_('order')) 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')) created_at = models.DateTimeField(auto_now_add=True, verbose_name=_('created at'))
updated_at = models.DateTimeField(auto_now=True, verbose_name=_('updated 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 tabnanny import verbose
from django.db import models from django.db import models
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from filer.fields.image import FilerImageField
from django.utils.text import slugify from django.utils.text import slugify
from typing import Optional from typing import Optional
from utils.slug import generate_smart_slug from utils.slug import generate_smart_slug
@ -215,13 +214,7 @@ class Transmitters(models.Model):
# Additional Information # Additional Information
description = models.JSONField(default = list , verbose_name=_('Description')) 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')) created_at = models.DateTimeField(auto_now_add=True, verbose_name=_('created at'))
updated_at = models.DateTimeField(auto_now=True, verbose_name=_('updated at')) updated_at = models.DateTimeField(auto_now=True, verbose_name=_('updated at'))

Loading…
Cancel
Save