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