You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
4.2 KiB
146 lines
4.2 KiB
from rest_framework import serializers
|
|
|
|
from ..serializers import HadisListSerializer
|
|
from ..models import BookReference , BookAuthor , BookReferenceImage, HadisReference , BookAttribute
|
|
|
|
class BookAuthorSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = BookAuthor
|
|
fields = ['id','name']
|
|
|
|
class BookReferenceImageSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = BookReferenceImage
|
|
fields = ['id','image','description','order']
|
|
|
|
class BookReferenceSerializer(serializers.ModelSerializer):
|
|
image = BookReferenceImageSerializer(
|
|
many= True ,
|
|
read_only = True ,
|
|
source = 'bookreference_set'
|
|
)
|
|
author = serializers.SerializerMethodField()
|
|
class Meta:
|
|
model = BookReference
|
|
fields = ['id','title','rate','author','description','image','volume']
|
|
def get_author (self,obj):
|
|
author = obj.authors.all()
|
|
return [
|
|
{
|
|
'id': author.id,
|
|
'name': author.name
|
|
}
|
|
for author in author
|
|
]
|
|
|
|
class BookAttributeSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = BookAttribute
|
|
fields = ['id', 'title', 'value','book_reference']
|
|
|
|
class BookDetailSerializer(serializers.ModelSerializer):
|
|
|
|
attribute = BookAttributeSerializer(
|
|
many=True,
|
|
read_only = True,
|
|
source = 'attributes'
|
|
)
|
|
author= BookAuthorSerializer(
|
|
many=True,
|
|
read_only=True,
|
|
source='authors'
|
|
)
|
|
image = BookReferenceImageSerializer(
|
|
many=True,
|
|
read_only=True,
|
|
source='images'
|
|
)
|
|
|
|
hadis = HadisListSerializer(
|
|
many=True,
|
|
read_only=True,
|
|
source='hadis_references'
|
|
)
|
|
|
|
class Meta:
|
|
model = BookReference
|
|
fields = ['id','title','rate','isbn','language','number_page','publisher','description','volume','slug','attribute','author','image','hadis']
|
|
|
|
|
|
class BookReferenceSyncSerializer(serializers.ModelSerializer):
|
|
"""Serializer for syncing all book reference data for offline mode"""
|
|
|
|
attribute = BookAttributeSerializer(
|
|
many=True,
|
|
read_only = True,
|
|
source = 'attributes'
|
|
)
|
|
author= BookAuthorSerializer(
|
|
many=True,
|
|
read_only=True,
|
|
source='authors'
|
|
)
|
|
image = BookReferenceImageSerializer(
|
|
many=True,
|
|
read_only=True,
|
|
source='images'
|
|
)
|
|
|
|
# Basic information
|
|
detail = serializers.SerializerMethodField()
|
|
|
|
# Hadis group (related hadises)
|
|
hadises = serializers.SerializerMethodField()
|
|
|
|
# authors = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = BookReference
|
|
fields = [
|
|
'id', 'title','rate' , 'author' ,'detail','image','attribute', 'hadises'
|
|
]
|
|
def get_authors(self,obj):
|
|
authors = []
|
|
try:
|
|
for author in obj.authors.all():
|
|
authors.append({
|
|
'id': author.id,
|
|
'name': author.name
|
|
})
|
|
except:
|
|
authors = []
|
|
return authors
|
|
|
|
|
|
def get_detail(self, obj):
|
|
"""Get basic book information including authors and rating"""
|
|
return {
|
|
'description': obj.description,
|
|
'volume': obj.volume,
|
|
'language': obj.language,
|
|
'isbn': obj.isbn,
|
|
'number_page':obj.number_page,
|
|
'year_of_publication': obj.year_of_publication,
|
|
'number_of_pages': obj.number_page,
|
|
'volume_info': obj.volume,
|
|
'rating': obj.rate
|
|
}
|
|
|
|
def get_hadises(self, obj):
|
|
"""Get all hadises related to this book reference"""
|
|
hadis_list = []
|
|
try:
|
|
for hadis_ref in obj.hadis_references.all():
|
|
hadis = hadis_ref.hadis
|
|
hadis_list.append({
|
|
'id': hadis.id,
|
|
'title': hadis.title,
|
|
'title_narrator': hadis.title_narrator,
|
|
'text': hadis.text,
|
|
'translation': hadis.get_translation(self.context.get('request').LANGUAGE_CODE if self.context.get('request') else 'en'),
|
|
'share_link': hadis.share_link
|
|
})
|
|
except:
|
|
pass
|
|
|
|
return hadis_list
|