Browse Source

feat(hadis): add ancestors category_path serialization from MPTT root to leaf

master
Mohsen Taba 3 weeks ago
parent
commit
9422073bcc
  1. 40
      apps/hadis/serializers/serializers_admin.py

40
apps/hadis/serializers/serializers_admin.py

@ -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",

Loading…
Cancel
Save