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