Browse Source

source author avatar field added

master
Mohsen Taba 20 hours ago
parent
commit
4d24052fdf
  1. 18
      apps/hadis/migrations/0034_bookauthor_image.py
  2. 8
      apps/hadis/models/reference.py
  3. 6
      apps/hadis/serializers/reference_v2.py
  4. 32
      apps/hadis/serializers/serializers_admin.py

18
apps/hadis/migrations/0034_bookauthor_image.py

@ -0,0 +1,18 @@
# Generated by Django 4.2.30 on 2026-08-23 16:19
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('hadis', '0033_bookeditor'),
]
operations = [
migrations.AddField(
model_name='bookauthor',
name='image',
field=models.ImageField(blank=True, help_text='image allowed', null=True, upload_to='hadis/author_images/', verbose_name='Image'),
),
]

8
apps/hadis/models/reference.py

@ -352,7 +352,13 @@ class BookAuthor(LowercaseSlugMixin, models.Model):
birth_year_miladi = models.IntegerField(verbose_name=_("Birth Year (Miladi)"), null=True, blank=True)
death_year_miladi = models.IntegerField(verbose_name=_("Death Year (Miladi)"), null=True, blank=True)
image = models.ImageField(
upload_to='hadis/author_images/',
null=True,
blank=True,
help_text=_('image allowed'),
verbose_name=_('Image')
)
created_at = models.DateTimeField(auto_now_add=True, verbose_name=_('created at'))
updated_at = models.DateTimeField(auto_now=True, verbose_name=_('updated at'))

6
apps/hadis/serializers/reference_v2.py

@ -17,7 +17,7 @@ class BookAuthorV2Serializer(serializers.ModelSerializer):
name = LocalizedField()
class Meta:
model = BookAuthor
fields = ['id', 'name', 'slug']
fields = ['id', 'name', 'slug', 'image']
class BookResearcherV2Serializer(serializers.ModelSerializer):
name = LocalizedField()
@ -261,7 +261,7 @@ class BookAuthorListSerializer(serializers.ModelSerializer):
class Meta:
model = BookAuthor
fields = ['id', 'slug', 'name', 'birth_year_hijri', 'birth_year_miladi']
fields = ['id', 'slug', 'name', 'image', 'birth_year_hijri', 'birth_year_miladi']
class BookAuthorDetailSerializer(serializers.ModelSerializer):
@ -277,7 +277,7 @@ class BookAuthorDetailSerializer(serializers.ModelSerializer):
class Meta:
model = BookAuthor
fields = [
'id', 'slug', 'name', 'known_as', 'scholarity',
'id', 'slug', 'name', 'image', 'known_as', 'scholarity',
'tabaqa', 'rutba', 'features',
'birth_year_hijri', 'death_year_hijri',
'birth_year_miladi', 'death_year_miladi',

32
apps/hadis/serializers/serializers_admin.py

@ -823,12 +823,17 @@ class AdminBookTypeSerializer(serializers.ModelSerializer):
class AdminBookAuthorSerializer(serializers.ModelSerializer):
image = AbsoluteImageField(required=False, allow_null=True)
remove_image = serializers.BooleanField(write_only=True, required=False, default=False)
class Meta:
model = BookAuthor
fields = [
"id",
"name",
"slug",
"image",
"remove_image",
"birth_year_hijri",
"death_year_hijri",
"birth_year_miladi",
@ -843,6 +848,33 @@ class AdminBookAuthorSerializer(serializers.ModelSerializer):
]
read_only_fields = ["id", "slug"]
def to_internal_value(self, data):
import json
mutable_data = safe_copy_data(data)
for json_field in ["name", "known_as", "scholarity", "tabaqa", "rutba", "features", "book_references"]:
val = mutable_data.get(json_field)
if isinstance(val, str):
try:
mutable_data[json_field] = json.loads(val)
except ValueError:
pass
for int_field in ["birth_year_hijri", "death_year_hijri", "birth_year_miladi", "death_year_miladi", "related_narrator"]:
val = mutable_data.get(int_field)
if val == "" or val == "null" or val == "undefined":
mutable_data[int_field] = None
return super().to_internal_value(mutable_data)
def create(self, validated_data):
validated_data.pop("remove_image", False)
return super().create(validated_data)
def update(self, instance, validated_data):
remove_image = validated_data.pop("remove_image", False)
if remove_image and instance.image:
instance.image.delete(save=False)
instance.image = None
return super().update(instance, validated_data)
class AdminBookAttributeSerializer(serializers.ModelSerializer):
class Meta:

Loading…
Cancel
Save