Browse Source

hadith serializer update to set and show hadith reference

master
Mohsen Taba 3 weeks ago
parent
commit
c72d5448ed
  1. 28
      apps/hadis/serializers/serializers_admin.py

28
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

Loading…
Cancel
Save