Browse Source

references api updated + narrator layer id added

master
Mohsen Taba 3 weeks ago
parent
commit
a14945c41e
  1. 2
      apps/hadis/serializers/hadis.py
  2. 59
      apps/hadis/serializers/reference_v2.py
  3. 6
      apps/hadis/views/reference_v2.py
  4. 3
      apps/hadis/views_admin.py

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

59
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):

6
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'
)
)

3
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")

Loading…
Cancel
Save