Browse Source

feat(hadis): add uncertain narrators support and prefetching in HadisSync API

master
Mohsen Taba 3 weeks ago
parent
commit
4d9c84be05
  1. 40
      apps/hadis/serializers/hadis.py
  2. 3
      apps/hadis/views/hadis.py

40
apps/hadis/serializers/hadis.py

@ -181,7 +181,7 @@ class HadisSyncSerializer(serializers.ModelSerializer):
layer = transmitter_rel.narrator_layer
reliability_block = None
if t.reliability:
if t and t.reliability:
reliability_block = {
'id': t.reliability.id,
'title': get_localized_text(t.reliability.title, request),
@ -189,12 +189,34 @@ class HadisSyncSerializer(serializers.ModelSerializer):
'main_color_code': t.reliability.main_color_code,
}
uncertain_list = []
if transmitter_rel.is_uncertain:
for ut in transmitter_rel.uncertain_transmitters.all():
ut_rel_block = None
if ut.reliability:
ut_rel_block = {
'id': ut.reliability.id,
'title': get_localized_text(ut.reliability.title, request),
'color': ut.reliability.color,
'main_color_code': ut.reliability.main_color_code,
}
uncertain_list.append({
'id': ut.id,
'name': get_localized_text(ut.full_name, request),
'slug': ut.slug,
'known_as': get_localized_text(ut.known_as, request),
'nickname': get_localized_text(ut.nickname, request),
'birth_year_hijri': ut.birth_year_hijri,
'death_year_hijri': ut.death_year_hijri,
'reliability': ut_rel_block,
})
transmitters_data.append({
'id': t.id,
'name': get_localized_text(t.full_name, request),
'slug': t.slug,
'known_as': get_localized_text(t.known_as, request),
'nickname': get_localized_text(t.nickname, request),
'id': t.id if t else None,
'name': get_localized_text(t.full_name, request) if t else None,
'slug': t.slug if t else None,
'known_as': get_localized_text(t.known_as, request) if t else None,
'nickname': get_localized_text(t.nickname, request) if t else None,
'reliability': reliability_block,
'layer_id': layer.id if layer else None,
'narrator_layer_id': layer.id if layer else None,
@ -202,8 +224,10 @@ class HadisSyncSerializer(serializers.ModelSerializer):
'layer_name': get_localized_text(layer.name, request) if layer else None,
'layer_description': get_localized_text(layer.description, request) if layer else None,
'is_gap': transmitter_rel.is_gap,
'birth_year_hijri': t.birth_year_hijri,
'death_year_hijri': t.death_year_hijri,
'is_uncertain': transmitter_rel.is_uncertain,
'uncertain_transmitters': uncertain_list,
'birth_year_hijri': t.birth_year_hijri if t else None,
'death_year_hijri': t.death_year_hijri if t else None,
'order': transmitter_rel.order,
})

3
apps/hadis/views/hadis.py

@ -124,6 +124,9 @@ class HadisSyncView(ListAPIView):
'transmitter',
'transmitter__reliability',
'narrator_layer'
).prefetch_related(
'uncertain_transmitters',
'uncertain_transmitters__reliability'
).order_by('order')
),
Prefetch(

Loading…
Cancel
Save