Browse Source

better and smarter way to show source volumes and edditions with has edditions switch

master
Mohsen Taba 5 hours ago
parent
commit
db03332ec5
  1. 18
      apps/hadis/migrations/0035_bookreference_has_editions.py
  2. 5
      apps/hadis/models/reference.py
  3. 16
      apps/hadis/serializers/reference_v2.py
  4. 2
      apps/hadis/serializers/serializers_admin.py

18
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'),
),
]

5
apps/hadis/models/reference.py

@ -125,6 +125,11 @@ class BookReference(LowercaseSlugMixin, models.Model):
null=True, null=True,
help_text=_('Rating from 0 to 5') 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')) created_at = models.DateTimeField(auto_now_add=True, verbose_name=_('created at'))
updated_at = models.DateTimeField(auto_now=True, verbose_name=_('updated at')) updated_at = models.DateTimeField(auto_now=True, verbose_name=_('updated at'))

16
apps/hadis/serializers/reference_v2.py

@ -152,7 +152,7 @@ class BookReferenceV2DetailSerializer(serializers.ModelSerializer):
paginator.page_size = 20 paginator.page_size = 20
request = self.context.get("request") 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: if paginated_hadis is not None:
serializer = HadisShortSerializer(paginated_hadis, many=True, context=self.context) serializer = HadisShortSerializer(paginated_hadis, many=True, context=self.context)
@ -171,8 +171,8 @@ class BookReferenceV2DetailSerializer(serializers.ModelSerializer):
} }
def get_volumes(self, obj): def get_volumes(self, obj):
editions = obj.editions.all()
if editions.exists():
if obj.has_editions:
editions = obj.editions.all()
editions_data = [] editions_data = []
for ed in editions: for ed in editions:
editions_data.append({ editions_data.append({
@ -189,7 +189,7 @@ class BookReferenceV2DetailSerializer(serializers.ModelSerializer):
return { return {
"has_editions": False, "has_editions": False,
"editions_volumes": [], "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): class BookReferenceV2SyncSerializer(serializers.ModelSerializer):
@ -205,7 +205,7 @@ class BookReferenceV2SyncSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = BookReference model = BookReference
fields = [ fields = [
'id', 'title', 'slug', 'share_link', 'rate', 'authors',
'id', 'title', 'slug', 'share_link', 'rate', 'has_editions', 'authors',
'attributes', 'images', 'information', 'hadises', 'volumes' 'attributes', 'images', 'information', 'hadises', 'volumes'
] ]
@ -231,8 +231,8 @@ class BookReferenceV2SyncSerializer(serializers.ModelSerializer):
return HadisShortSerializer(hadis_list, many=True, context=self.context).data return HadisShortSerializer(hadis_list, many=True, context=self.context).data
def get_volumes(self, obj): def get_volumes(self, obj):
editions = obj.editions.all()
if editions.exists():
if obj.has_editions:
editions = obj.editions.all()
editions_data = [] editions_data = []
for ed in editions: for ed in editions:
editions_data.append({ editions_data.append({
@ -249,7 +249,7 @@ class BookReferenceV2SyncSerializer(serializers.ModelSerializer):
return { return {
"has_editions": False, "has_editions": False,
"editions_volumes": [], "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 from apps.hadis.models.reference import BookAuthor, BookReference

2
apps/hadis/serializers/serializers_admin.py

@ -917,6 +917,7 @@ class AdminBookReferenceListSerializer(serializers.ModelSerializer):
"id", "id",
"title", "title",
"slug", "slug",
"has_editions",
"volume", "volume",
"publisher", "publisher",
"year_of_publication", "year_of_publication",
@ -1013,6 +1014,7 @@ class AdminBookReferenceDetailSerializer(serializers.ModelSerializer):
"title", "title",
"description", "description",
"language", "language",
"has_editions",
"isbn", "isbn",
"volume", "volume",
"number_of_volumes", "number_of_volumes",

Loading…
Cancel
Save