Browse Source

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

master
Mohsen Taba 2 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,
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'))

16
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

2
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",

Loading…
Cancel
Save