|
|
|
@ -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 |
|
|
|
|
|
|
|
|
|
|
|
|