From db03332ec55a9121066dd43a6c70021afcdd3ca7 Mon Sep 17 00:00:00 2001 From: mohsentaba Date: Mon, 24 Aug 2026 11:06:43 +0330 Subject: [PATCH] better and smarter way to show source volumes and edditions with has edditions switch --- .../0035_bookreference_has_editions.py | 18 ++++++++++++++++++ apps/hadis/models/reference.py | 5 +++++ apps/hadis/serializers/reference_v2.py | 16 ++++++++-------- apps/hadis/serializers/serializers_admin.py | 2 ++ 4 files changed, 33 insertions(+), 8 deletions(-) create mode 100644 apps/hadis/migrations/0035_bookreference_has_editions.py diff --git a/apps/hadis/migrations/0035_bookreference_has_editions.py b/apps/hadis/migrations/0035_bookreference_has_editions.py new file mode 100644 index 0000000..f8c0920 --- /dev/null +++ b/apps/hadis/migrations/0035_bookreference_has_editions.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.30 on 2026-08-24 10:29 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('hadis', '0034_bookauthor_image'), + ] + + operations = [ + migrations.AddField( + model_name='bookreference', + name='has_editions', + field=models.BooleanField(default=False, help_text='True if this reference has one or more editions, False for direct volumes without edition structure', verbose_name='Has Editions Structure'), + ), + ] diff --git a/apps/hadis/models/reference.py b/apps/hadis/models/reference.py index 32ac206..93fdd77 100644 --- a/apps/hadis/models/reference.py +++ b/apps/hadis/models/reference.py @@ -125,6 +125,11 @@ class BookReference(LowercaseSlugMixin, models.Model): null=True, help_text=_('Rating from 0 to 5') ) + has_editions = models.BooleanField( + default=False, + verbose_name=_('Has Editions Structure'), + help_text=_('True if this reference has one or more editions, False for direct volumes without edition structure') + ) created_at = models.DateTimeField(auto_now_add=True, verbose_name=_('created at')) updated_at = models.DateTimeField(auto_now=True, verbose_name=_('updated at')) diff --git a/apps/hadis/serializers/reference_v2.py b/apps/hadis/serializers/reference_v2.py index 5d799f1..826a4dd 100644 --- a/apps/hadis/serializers/reference_v2.py +++ b/apps/hadis/serializers/reference_v2.py @@ -152,7 +152,7 @@ class BookReferenceV2DetailSerializer(serializers.ModelSerializer): paginator.page_size = 20 request = self.context.get("request") - paginated_hadis = paginator.paginate_queryset(hadis_qs, 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) @@ -171,8 +171,8 @@ class BookReferenceV2DetailSerializer(serializers.ModelSerializer): } def get_volumes(self, obj): - editions = obj.editions.all() - if editions.exists(): + if obj.has_editions: + editions = obj.editions.all() editions_data = [] for ed in editions: editions_data.append({ @@ -189,7 +189,7 @@ class BookReferenceV2DetailSerializer(serializers.ModelSerializer): return { "has_editions": False, "editions_volumes": [], - "all_volumes": BookVolumeV2Serializer(obj.volumes.all(), many=True, context=self.context).data + "all_volumes": BookVolumeV2Serializer(obj.volumes.filter(edition__isnull=True), many=True, context=self.context).data } class BookReferenceV2SyncSerializer(serializers.ModelSerializer): @@ -205,7 +205,7 @@ class BookReferenceV2SyncSerializer(serializers.ModelSerializer): class Meta: model = BookReference fields = [ - 'id', 'title', 'slug', 'share_link', 'rate', 'authors', + 'id', 'title', 'slug', 'share_link', 'rate', 'has_editions', 'authors', 'attributes', 'images', 'information', 'hadises', 'volumes' ] @@ -231,8 +231,8 @@ class BookReferenceV2SyncSerializer(serializers.ModelSerializer): return HadisShortSerializer(hadis_list, many=True, context=self.context).data def get_volumes(self, obj): - editions = obj.editions.all() - if editions.exists(): + if obj.has_editions: + editions = obj.editions.all() editions_data = [] for ed in editions: editions_data.append({ @@ -249,7 +249,7 @@ class BookReferenceV2SyncSerializer(serializers.ModelSerializer): return { "has_editions": False, "editions_volumes": [], - "all_volumes": BookVolumeV2Serializer(obj.volumes.all(), many=True, context=self.context).data + "all_volumes": BookVolumeV2Serializer(obj.volumes.filter(edition__isnull=True), many=True, context=self.context).data } from apps.hadis.models.reference import BookAuthor, BookReference diff --git a/apps/hadis/serializers/serializers_admin.py b/apps/hadis/serializers/serializers_admin.py index d6daa8a..95b5a67 100644 --- a/apps/hadis/serializers/serializers_admin.py +++ b/apps/hadis/serializers/serializers_admin.py @@ -917,6 +917,7 @@ class AdminBookReferenceListSerializer(serializers.ModelSerializer): "id", "title", "slug", + "has_editions", "volume", "publisher", "year_of_publication", @@ -1013,6 +1014,7 @@ class AdminBookReferenceDetailSerializer(serializers.ModelSerializer): "title", "description", "language", + "has_editions", "isbn", "volume", "number_of_volumes",