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.
50 lines
1.4 KiB
50 lines
1.4 KiB
|
|
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')
|