from rest_framework import serializers 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): translation = serializers.CharField(source='translation') text = serializers.CharField(source='text') tags = serializers.SerializerMethodField() def get_tags(self, obj): return HadisTagSerializer(obj.get_tags, many=True).data class Meta: model = Hadis fields = ('number', 'title', 'text', 'translation', 'tags')