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.
 
 

127 lines
3.8 KiB

from rest_framework import serializers
from dj_filer.admin import get_thumbs
from apps.hadis.models import *
class HadisCategorySerializer(serializers.ModelSerializer):
children = serializers.SerializerMethodField('get_children')
name = serializers.SerializerMethodField()
hadis_count = serializers.SerializerMethodField()
source_type = serializers.CharField(read_only=True)
def get_children(self, obj):
return [self.to_dict(cat) for cat in obj.get_children()]
def to_dict(self, c):
children = c.get_children()
return {
'id': c.id,
'name': c.name,
'hadis_count': c.hadis_count,
'source_type': c.source_type,
'category_type': c.category_type,
'children': [] if not children else [self.to_dict(i) for i in children],
}
class Meta:
model = HadisCategory
fields = ['id', 'name', 'hadis_count', 'source_type','children']
class HadisTagSerializer(serializers.ModelSerializer):
class Meta:
model = HadisTag
fields = ('id', 'title')
class HadisSerializer(serializers.ModelSerializer):
class Meta:
model = Hadis
fields = ('number', 'title', 'text', 'translation',)
class ReferenceImageSerializer(serializers.ModelSerializer):
thumbnail = serializers.SerializerMethodField()
class Meta:
model = ReferenceImage
fields = ('id', 'thumbnail', 'priority')
def get_thumbnail(self, obj):
return get_thumbs(obj.thumbnail, self.context.get('request'))
class HadisReferenceSerializer(serializers.ModelSerializer):
images = serializers.SerializerMethodField()
class Meta:
model = HadisReference
fields = ('id', 'book', 'description', 'created_at', 'images')
def get_images(self, obj):
return ReferenceImageSerializer(
obj.referenceimage_set.all(),
many=True,
context=self.context
).data
class TransmittersSerializer(serializers.ModelSerializer):
thumbnail = serializers.SerializerMethodField()
class Meta:
model = Transmitters
fields = ('id', 'full_name', 'birth_year_hijri', 'death_year_hijri',
'description', 'status', 'status_color', 'thumbnail')
def get_thumbnail(self, obj):
return get_thumbs(obj.thumbnail, self.context.get('request'))
class HadisTransmitterSerializer(serializers.ModelSerializer):
transmitter = serializers.SerializerMethodField()
class Meta:
model = HadisTransmitter
fields = ('id', 'transmitter', 'description', 'order', 'created_at')
def get_transmitter(self, obj):
return TransmittersSerializer(
obj.transmitter,
context=self.context
).data
class HadisOverviewSerializer(serializers.ModelSerializer):
tags = serializers.SerializerMethodField()
class Meta:
model = HadisOverview
fields = ('status', 'status_color', 'status_text', 'address', 'links', 'tags', 'share_link', 'explanation', 'created_at')
def get_tags(self, obj):
return HadisTagSerializer(
obj.tags.all(),
many=True,
context=self.context
).data
class HadisDetailSerializer(serializers.ModelSerializer):
overview = HadisOverviewSerializer(source='hadisoverview', read_only=True)
reference = serializers.SerializerMethodField()
transmitters = HadisTransmitterSerializer(many=True, read_only=True)
class Meta:
model = Hadis
fields = ('id', 'number', 'title', 'text', 'translation', 'status',
'created_at', 'updated_at', 'overview', 'reference', 'transmitters')
def get_reference(self, obj):
reference = obj.references.first()
if reference:
return HadisReferenceSerializer(reference, context=self.context).data
return None