|
|
|
@ -45,6 +45,7 @@ class AdminHadisCategorySerializer(serializers.ModelSerializer): |
|
|
|
has_children = serializers.SerializerMethodField() |
|
|
|
is_leaf = serializers.SerializerMethodField() |
|
|
|
has_hadith = serializers.SerializerMethodField() |
|
|
|
ancestors = serializers.SerializerMethodField() |
|
|
|
|
|
|
|
def get_has_children(self, obj): |
|
|
|
if hasattr(obj, "annotated_has_children"): |
|
|
|
@ -61,6 +62,24 @@ class AdminHadisCategorySerializer(serializers.ModelSerializer): |
|
|
|
return bool(obj.annotated_has_hadith) |
|
|
|
return obj.hadis_set.exists() |
|
|
|
|
|
|
|
def get_ancestors(self, obj): |
|
|
|
if not obj: |
|
|
|
return [] |
|
|
|
ancestors_qs = obj.get_ancestors(include_self=True).select_related('sect') |
|
|
|
return [ |
|
|
|
{ |
|
|
|
"id": a.id, |
|
|
|
"title": a.title, |
|
|
|
"slug": a.slug, |
|
|
|
"source_type": a.source_type, |
|
|
|
"sect_type": a.sect.sect_type if a.sect else None, |
|
|
|
"order": a.order, |
|
|
|
"is_root": a.parent_id is None, |
|
|
|
"level": getattr(a, a._mptt_meta.level_attr) if hasattr(a, '_mptt_meta') else 0, |
|
|
|
} |
|
|
|
for a in ancestors_qs |
|
|
|
] |
|
|
|
|
|
|
|
class Meta: |
|
|
|
model = HadisCategory |
|
|
|
fields = [ |
|
|
|
@ -76,6 +95,7 @@ class AdminHadisCategorySerializer(serializers.ModelSerializer): |
|
|
|
"has_children", |
|
|
|
"is_leaf", |
|
|
|
"has_hadith", |
|
|
|
"ancestors", |
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
@ -226,6 +246,7 @@ class AdminHadisDetailSerializer(serializers.ModelSerializer): |
|
|
|
required=False, |
|
|
|
) |
|
|
|
collections_detail = serializers.SerializerMethodField() |
|
|
|
category_path = serializers.SerializerMethodField() |
|
|
|
book_reference_id = serializers.PrimaryKeyRelatedField( |
|
|
|
queryset=BookReference.objects.all(), |
|
|
|
required=False, |
|
|
|
@ -235,6 +256,24 @@ class AdminHadisDetailSerializer(serializers.ModelSerializer): |
|
|
|
|
|
|
|
bookmark_count = serializers.SerializerMethodField() |
|
|
|
|
|
|
|
def get_category_path(self, obj): |
|
|
|
if not obj.category: |
|
|
|
return [] |
|
|
|
ancestors_qs = obj.category.get_ancestors(include_self=True).select_related('sect') |
|
|
|
return [ |
|
|
|
{ |
|
|
|
"id": a.id, |
|
|
|
"title": a.title, |
|
|
|
"slug": a.slug, |
|
|
|
"source_type": a.source_type, |
|
|
|
"sect_type": a.sect.sect_type if a.sect else None, |
|
|
|
"order": a.order, |
|
|
|
"is_root": a.parent_id is None, |
|
|
|
"level": getattr(a, a._mptt_meta.level_attr) if hasattr(a, '_mptt_meta') else 0, |
|
|
|
} |
|
|
|
for a in ancestors_qs |
|
|
|
] |
|
|
|
|
|
|
|
class Meta: |
|
|
|
model = Hadis |
|
|
|
fields = [ |
|
|
|
@ -243,6 +282,7 @@ class AdminHadisDetailSerializer(serializers.ModelSerializer): |
|
|
|
"slug", |
|
|
|
"category", |
|
|
|
"category_detail", |
|
|
|
"category_path", |
|
|
|
"title_narrator", |
|
|
|
"title", |
|
|
|
"description", |
|
|
|
|