From a14945c41ee850ab3d1b0867bd19778b56825599 Mon Sep 17 00:00:00 2001 From: mohsentaba Date: Mon, 31 Aug 2026 14:17:13 +0330 Subject: [PATCH] references api updated + narrator layer id added --- apps/hadis/serializers/hadis.py | 2 + apps/hadis/serializers/reference_v2.py | 59 ++++++++++++-------------- apps/hadis/views/reference_v2.py | 6 ++- apps/hadis/views_admin.py | 3 +- 4 files changed, 35 insertions(+), 35 deletions(-) diff --git a/apps/hadis/serializers/hadis.py b/apps/hadis/serializers/hadis.py index 5fbe99b..66689da 100644 --- a/apps/hadis/serializers/hadis.py +++ b/apps/hadis/serializers/hadis.py @@ -196,6 +196,8 @@ class HadisSyncSerializer(serializers.ModelSerializer): 'known_as': get_localized_text(t.known_as, request), 'nickname': get_localized_text(t.nickname, request), 'reliability': reliability_block, + 'layer_id': layer.id if layer else None, + 'narrator_layer_id': layer.id if layer else None, 'layer_level': layer.number if layer else None, 'layer_name': get_localized_text(layer.name, request) if layer else None, 'layer_description': get_localized_text(layer.description, request) if layer else None, diff --git a/apps/hadis/serializers/reference_v2.py b/apps/hadis/serializers/reference_v2.py index a34b734..0ee6b45 100644 --- a/apps/hadis/serializers/reference_v2.py +++ b/apps/hadis/serializers/reference_v2.py @@ -22,16 +22,38 @@ class BookAuthorV2Serializer(serializers.ModelSerializer): class BookResearcherV2Serializer(serializers.ModelSerializer): name = LocalizedField() author = BookAuthorV2Serializer(read_only=True) + author_id = serializers.SerializerMethodField() + slug = serializers.SerializerMethodField() + class Meta: model = BookResearcher - fields = ['id', 'name', 'slug', 'author'] + fields = ['id', 'name', 'slug', 'author', 'author_id'] + + def get_author_id(self, obj): + return obj.author_id + + def get_slug(self, obj): + if obj.author and obj.author.slug: + return obj.author.slug + return obj.slug class BookEditorV2Serializer(serializers.ModelSerializer): name = LocalizedField() author = BookAuthorV2Serializer(read_only=True) + author_id = serializers.SerializerMethodField() + slug = serializers.SerializerMethodField() + class Meta: model = BookEditor - fields = ['id', 'name', 'slug', 'author'] + fields = ['id', 'name', 'slug', 'author', 'author_id'] + + def get_author_id(self, obj): + return obj.author_id + + def get_slug(self, obj): + if obj.author and obj.author.slug: + return obj.author.slug + return obj.slug class BookReferenceV2ListSerializer(serializers.ModelSerializer): title = LocalizedField() @@ -122,14 +144,14 @@ class BookReferenceV2DetailSerializer(serializers.ModelSerializer): title = LocalizedField() authors = serializers.SerializerMethodField() image = serializers.SerializerMethodField() + tag = BookTagV2Serializer(read_only=True) information = serializers.SerializerMethodField() - excerpts = serializers.SerializerMethodField() volumes = serializers.SerializerMethodField() class Meta: model = BookReference - fields = ['id', 'title', 'authors', 'image', 'information', 'excerpts', 'volumes'] + fields = ['id', 'title', 'authors', 'image', 'tag', 'information', 'volumes'] def get_authors(self, obj): if obj.author: @@ -157,33 +179,6 @@ class BookReferenceV2DetailSerializer(serializers.ModelSerializer): "editions": editions } - def get_excerpts(self, obj): - from apps.hadis.models import Hadis - hadis_ids = obj.hadis_references.values_list('hadis', flat=True) - hadis_qs = Hadis.objects.filter(id__in=hadis_ids, status=True).order_by('id') - - paginator = PageNumberPagination() - paginator.page_size = 20 - request = self.context.get("request") - - paginated_hadis = paginator.paginate_queryset(hadis_qs, request) if request else None - - if paginated_hadis is not None: - serializer = HadisShortSerializer(paginated_hadis, many=True, context=self.context) - return { - 'count': paginator.page.paginator.count, - 'next': paginator.get_next_link(), - 'previous': paginator.get_previous_link(), - 'results': serializer.data - } - - return { - 'count': hadis_qs.count(), - 'next': None, - 'previous': None, - 'results': HadisShortSerializer(hadis_qs, many=True, context=self.context).data - } - def get_volumes(self, obj): if obj.has_editions: editions = obj.editions.all() @@ -203,7 +198,7 @@ class BookReferenceV2DetailSerializer(serializers.ModelSerializer): return { "has_editions": False, "editions_volumes": [], - "all_volumes": BookVolumeV2Serializer(obj.volumes.filter(edition__isnull=True), many=True, context=self.context).data + "all_volumes": BookVolumeV2Serializer(obj.volumes.all(), many=True, context=self.context).data } class BookReferenceV2SyncSerializer(serializers.ModelSerializer): diff --git a/apps/hadis/views/reference_v2.py b/apps/hadis/views/reference_v2.py index 4160b69..d2abb24 100644 --- a/apps/hadis/views/reference_v2.py +++ b/apps/hadis/views/reference_v2.py @@ -16,12 +16,14 @@ class BookReferenceV2DetailView(generics.RetrieveAPIView): return ( BookReference.objects .filter(slug=self.kwargs.get('slug')) - .select_related('author') + .select_related('author', 'tag') .prefetch_related( + 'editions__tag', + 'editions__researchers__author', + 'editions__editors__author', 'editions__volumes__images', 'volumes__images', 'images', - 'hadis_references__hadis' ) ) diff --git a/apps/hadis/views_admin.py b/apps/hadis/views_admin.py index b5639ab..7669b93 100644 --- a/apps/hadis/views_admin.py +++ b/apps/hadis/views_admin.py @@ -625,7 +625,8 @@ class AdminBookReferenceViewSet(ModelViewSet): | Q(editions__publisher__icontains=search_query) | Q(description__icontains=search_query) | Q(author__name__icontains=search_query) - | Q(tags__title__icontains=search_query) + | Q(tag__title__icontains=search_query) + | Q(editions__tag__title__icontains=search_query) ) type_id = self.request.query_params.get("type")