Browse Source

hadis collection set api for admin panel fixed

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

38
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

Loading…
Cancel
Save