From 3c9f4be69e4a986f719eeb36f1fe9fc776e4e38f Mon Sep 17 00:00:00 2001 From: mohsentaba Date: Sat, 4 Jul 2026 10:54:57 +0330 Subject: [PATCH] hadis collection set api for admin panel fixed --- apps/hadis/serializers/serializers_admin.py | 38 ++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/apps/hadis/serializers/serializers_admin.py b/apps/hadis/serializers/serializers_admin.py index 8594d99..37414d0 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, + 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