|
|
|
@ -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, |
|
|
|
Hadis, HadisCategory, HadisStatus, HadisTag, HadisCorrection, HadisInterpretation, HadisCollection, HadisSect, HadisInCollection, |
|
|
|
BookReference, BookReferenceImage, BookReferenceDocument, BookAuthor, BookAttribute, BookSubjectArea, BookType, |
|
|
|
Transmitters, TransmitterReliability, NarratorLayer, OpinionStatus |
|
|
|
) |
|
|
|
@ -71,6 +71,20 @@ class AdminHadisListSerializer(serializers.ModelSerializer): |
|
|
|
read_only_fields = ["id", "slug", "created_at", "updated_at"] |
|
|
|
|
|
|
|
|
|
|
|
class HadisCollectionsField(serializers.PrimaryKeyRelatedField): |
|
|
|
def to_representation(self, value): |
|
|
|
return value.collection_id |
|
|
|
|
|
|
|
|
|
|
|
class AdminHadisCollectionSerializer(serializers.ModelSerializer): |
|
|
|
title = serializers.JSONField() |
|
|
|
summary = serializers.JSONField() |
|
|
|
|
|
|
|
class Meta: |
|
|
|
model = HadisCollection |
|
|
|
fields = ["id", "title", "slug", "summary", "display_position", "status", "order", "pin_top"] |
|
|
|
|
|
|
|
|
|
|
|
class AdminHadisDetailSerializer(serializers.ModelSerializer): |
|
|
|
category_detail = AdminHadisCategorySerializer(source="category", read_only=True) |
|
|
|
hadis_status_detail = AdminHadisStatusSerializer(source="hadis_status", read_only=True) |
|
|
|
@ -91,6 +105,13 @@ class AdminHadisDetailSerializer(serializers.ModelSerializer): |
|
|
|
many=True, |
|
|
|
required=False, |
|
|
|
) |
|
|
|
collections = HadisCollectionsField( |
|
|
|
source="collection_items", |
|
|
|
queryset=HadisCollection.objects.all(), |
|
|
|
many=True, |
|
|
|
required=False, |
|
|
|
) |
|
|
|
collections_detail = serializers.SerializerMethodField() |
|
|
|
|
|
|
|
bookmark_count = serializers.SerializerMethodField() |
|
|
|
|
|
|
|
@ -115,6 +136,8 @@ class AdminHadisDetailSerializer(serializers.ModelSerializer): |
|
|
|
"links", |
|
|
|
"tags", |
|
|
|
"tags_detail", |
|
|
|
"collections", |
|
|
|
"collections_detail", |
|
|
|
"share_link", |
|
|
|
"explanation", |
|
|
|
"bookmark_count", |
|
|
|
@ -128,18 +151,31 @@ class AdminHadisDetailSerializer(serializers.ModelSerializer): |
|
|
|
from apps.bookmark.models.bookmark import Bookmark |
|
|
|
return Bookmark.objects.filter(service=Bookmark.ServiceChoices.HADITH, content_id=obj.id, status=True).count() |
|
|
|
|
|
|
|
def get_collections_detail(self, obj): |
|
|
|
collections = [item.collection for item in obj.collection_items.all()] |
|
|
|
return AdminHadisCollectionSerializer(collections, many=True).data |
|
|
|
|
|
|
|
def create(self, validated_data): |
|
|
|
tags = validated_data.pop("tags", []) |
|
|
|
collections = validated_data.pop("collection_items", []) |
|
|
|
hadis = super().create(validated_data) |
|
|
|
if tags: |
|
|
|
hadis.tags.set(tags) |
|
|
|
if collections: |
|
|
|
for idx, col in enumerate(collections): |
|
|
|
HadisInCollection.objects.create(hadis=hadis, collection=col, order=idx) |
|
|
|
return hadis |
|
|
|
|
|
|
|
def update(self, instance, validated_data): |
|
|
|
tags = validated_data.pop("tags", None) |
|
|
|
collections = validated_data.pop("collection_items", None) |
|
|
|
hadis = super().update(instance, validated_data) |
|
|
|
if tags is not None: |
|
|
|
hadis.tags.set(tags) |
|
|
|
if collections is not None: |
|
|
|
instance.collection_items.all().delete() |
|
|
|
for idx, col in enumerate(collections): |
|
|
|
HadisInCollection.objects.create(hadis=hadis, collection=col, order=idx) |
|
|
|
return hadis |
|
|
|
|
|
|
|
|
|
|
|
|