diff --git a/apps/hadis/migrations/0039_bookvolume_file.py b/apps/hadis/migrations/0039_bookvolume_file.py new file mode 100644 index 0000000..ffcabfb --- /dev/null +++ b/apps/hadis/migrations/0039_bookvolume_file.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.30 on 2026-09-01 17:56 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('hadis', '0038_alter_booksubjectarea_options_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='bookvolume', + name='file', + field=models.FileField(blank=True, null=True, upload_to='hadis/volume_files/', verbose_name='File'), + ), + ] diff --git a/apps/hadis/models/reference.py b/apps/hadis/models/reference.py index a9c6960..b038adb 100644 --- a/apps/hadis/models/reference.py +++ b/apps/hadis/models/reference.py @@ -260,6 +260,12 @@ class BookVolume(models.Model): blank=True, verbose_name=_('Image') ) + file = models.FileField( + upload_to='hadis/volume_files/', + null=True, + blank=True, + verbose_name=_('File') + ) created_at = models.DateTimeField(auto_now_add=True, verbose_name=_('created at')) updated_at = models.DateTimeField(auto_now=True, verbose_name=_('updated at')) diff --git a/apps/hadis/serializers/reference_v2.py b/apps/hadis/serializers/reference_v2.py index 978f63f..9ebd870 100644 --- a/apps/hadis/serializers/reference_v2.py +++ b/apps/hadis/serializers/reference_v2.py @@ -129,10 +129,11 @@ class BookEditionV2Serializer(serializers.ModelSerializer): class BookVolumeV2Serializer(serializers.ModelSerializer): image = serializers.SerializerMethodField() + file = serializers.SerializerMethodField() class Meta: model = BookVolume - fields = ['id', 'title', 'image'] + fields = ['id', 'title', 'image', 'file'] def get_image(self, obj): request = self.context.get('request') @@ -147,6 +148,19 @@ class BookVolumeV2Serializer(serializers.ModelSerializer): return absolute_https_url(first_image.image.url) return None + def get_file(self, obj): + request = self.context.get('request') + if obj.file: + if request: + return absolute_https_url(obj.file.url, request) + return absolute_https_url(obj.file.url) + first_doc = obj.documents.order_by('order').first() + if first_doc and first_doc.file: + if request: + return absolute_https_url(first_doc.file.url, request) + return absolute_https_url(first_doc.file.url) + return None + class BookReferenceV2DetailSerializer(serializers.ModelSerializer): title = LocalizedField() authors = serializers.SerializerMethodField() diff --git a/apps/hadis/serializers/serializers_admin.py b/apps/hadis/serializers/serializers_admin.py index 9d81dbe..e633dac 100644 --- a/apps/hadis/serializers/serializers_admin.py +++ b/apps/hadis/serializers/serializers_admin.py @@ -1848,6 +1848,7 @@ class AdminTransmitterOriginalTextSerializer(serializers.ModelSerializer): class AdminBookVolumeSerializer(serializers.ModelSerializer): remove_image = serializers.BooleanField(write_only=True, required=False, default=False) + remove_file = serializers.BooleanField(write_only=True, required=False, default=False) class Meta: model = BookVolume @@ -1857,20 +1858,27 @@ class AdminBookVolumeSerializer(serializers.ModelSerializer): "edition", "title", "image", + "file", "remove_image", + "remove_file", "created_at", "updated_at", ] def create(self, validated_data): validated_data.pop("remove_image", False) + validated_data.pop("remove_file", False) return super().create(validated_data) def update(self, instance, validated_data): remove_image = validated_data.pop("remove_image", False) + remove_file = validated_data.pop("remove_file", False) if remove_image and instance.image: instance.image.delete(save=False) instance.image = None + if remove_file and instance.file: + instance.file.delete(save=False) + instance.file = None return super().update(instance, validated_data)