diff --git a/apps/hadis/serializers/serializers_admin.py b/apps/hadis/serializers/serializers_admin.py index 81dcaf3..6240e94 100644 --- a/apps/hadis/serializers/serializers_admin.py +++ b/apps/hadis/serializers/serializers_admin.py @@ -3,7 +3,7 @@ from django.core.files.uploadedfile import SimpleUploadedFile from utils.image_compression import maybe_compress_uploaded_file from ..models import ( - Hadis, HadisCategory, HadisStatus, HadisTag, HadisCorrection, HadisInterpretation, HadisCollection, HadisSect, HadisInCollection, HadisTransmitter, + Hadis, HadisCategory, HadisStatus, HadisTag, HadisCorrection, HadisInterpretation, HadisCollection, HadisSect, HadisInCollection, HadisTransmitter, HadisReference, BookReference, BookReferenceImage, BookReferenceDocument, BookAuthor, BookAttribute, BookSubjectArea, BookType, BookEdition, BookVolume, BookResearcher, BookEditor, Transmitters, TransmitterReliability, NarratorLayer, OpinionStatus, TransmitterOpinion, TransmitterOriginalText, CorrectionReference, CorrectionReferenceImage, InterpretationReference, InterpretationReferenceImage, @@ -188,6 +188,12 @@ class AdminHadisDetailSerializer(serializers.ModelSerializer): required=False, ) collections_detail = serializers.SerializerMethodField() + book_reference_id = serializers.PrimaryKeyRelatedField( + queryset=BookReference.objects.all(), + required=False, + write_only=True, + allow_null=True, + ) bookmark_count = serializers.SerializerMethodField() @@ -214,6 +220,7 @@ class AdminHadisDetailSerializer(serializers.ModelSerializer): "tags_detail", "collections", "collections_detail", + "book_reference_id", "share_link", "explanation", "bookmark_count", @@ -223,6 +230,13 @@ class AdminHadisDetailSerializer(serializers.ModelSerializer): ] read_only_fields = ["id", "slug", "share_link", "bookmark_count", "created_at", "updated_at"] + def to_representation(self, instance): + ret = super().to_representation(instance) + refs = list(instance.references.all()) + ref = refs[0] if refs else None + ret["book_reference"] = ref.book_reference_id if ref else None + return ret + def get_bookmark_count(self, obj): from apps.bookmark.models.bookmark import Bookmark return Bookmark.objects.filter(service=Bookmark.ServiceChoices.HADITH, content_id=obj.id, status=True).count() @@ -232,6 +246,7 @@ class AdminHadisDetailSerializer(serializers.ModelSerializer): return AdminHadisCollectionSerializer(collections, many=True).data def create(self, validated_data): + book_reference = validated_data.pop("book_reference_id", None) tags = validated_data.pop("tags", []) collections = validated_data.pop("collection_items", []) hadis = super().create(validated_data) @@ -240,9 +255,13 @@ class AdminHadisDetailSerializer(serializers.ModelSerializer): if collections: for idx, col in enumerate(collections): HadisInCollection.objects.create(hadis=hadis, collection=col, order=idx) + if book_reference: + HadisReference.objects.create(hadis=hadis, book_reference=book_reference) return hadis def update(self, instance, validated_data): + book_reference_provided = "book_reference_id" in validated_data + book_reference = validated_data.pop("book_reference_id", None) tags = validated_data.pop("tags", None) collections = validated_data.pop("collection_items", None) hadis = super().update(instance, validated_data) @@ -252,6 +271,13 @@ class AdminHadisDetailSerializer(serializers.ModelSerializer): instance.collection_items.all().delete() for idx, col in enumerate(collections): HadisInCollection.objects.create(hadis=hadis, collection=col, order=idx) + if book_reference_provided: + ref = instance.references.first() + if ref: + ref.book_reference = book_reference + ref.save() + elif book_reference: + HadisReference.objects.create(hadis=hadis, book_reference=book_reference) return hadis