Browse Source

transmitter schollar connection to author profile, category slugs returns in hadith detail pages

master
Mohsen Taba 4 weeks ago
parent
commit
19ac1436be
  1. 19
      apps/hadis/migrations/0020_transmitteropinion_scholar.py
  2. 8
      apps/hadis/models/transmitter.py
  3. 24
      apps/hadis/serializers/hadis.py

19
apps/hadis/migrations/0020_transmitteropinion_scholar.py

@ -0,0 +1,19 @@
# Generated by Django 5.2.12 on 2026-06-22 09:48
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('hadis', '0019_bookauthor_related_narrator'),
]
operations = [
migrations.AddField(
model_name='transmitteropinion',
name='scholar',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transmitter_opinions', to='hadis.bookauthor', verbose_name='Scholar'),
),
]

8
apps/hadis/models/transmitter.py

@ -587,6 +587,14 @@ class TransmitterOpinion(models.Model):
verbose_name=_('transmitter'), verbose_name=_('transmitter'),
related_name='opinions' related_name='opinions'
) )
scholar = models.ForeignKey(
'hadis.BookAuthor',
on_delete=models.SET_NULL,
verbose_name=_('Scholar'),
related_name='transmitter_opinions',
null=True,
blank=True
)
scholar_name = models.JSONField(default = list , verbose_name=_('Scholar Name')) scholar_name = models.JSONField(default = list , verbose_name=_('Scholar Name'))
opinion_text = models.JSONField(default = list , verbose_name=_('Opinion Text')) opinion_text = models.JSONField(default = list , verbose_name=_('Opinion Text'))
status = models.ForeignKey( status = models.ForeignKey(

24
apps/hadis/serializers/hadis.py

@ -86,6 +86,7 @@ class HadisSyncSerializer(serializers.ModelSerializer):
narrators = serializers.SerializerMethodField() narrators = serializers.SerializerMethodField()
explanations = serializers.SerializerMethodField() explanations = serializers.SerializerMethodField()
corrections = serializers.SerializerMethodField() corrections = serializers.SerializerMethodField()
category_slug = serializers.CharField(source='category.slug', read_only=True)
title =LocalizedField() title =LocalizedField()
title_narrator = LocalizedField() title_narrator = LocalizedField()
translation = LocalizedField() translation = LocalizedField()
@ -94,7 +95,7 @@ class HadisSyncSerializer(serializers.ModelSerializer):
model = Hadis model = Hadis
fields = [ fields = [
# header (no-extend) # header (no-extend)
'id', 'number', 'slug', 'category_id', 'title', 'title_narrator', 'text', 'translation',
'id', 'number', 'slug', 'category_id', 'category_slug', 'title', 'title_narrator', 'text', 'translation',
# grouped sections # grouped sections
'detail', 'narrators', 'explanations', 'corrections', 'detail', 'narrators', 'explanations', 'corrections',
] ]
@ -366,10 +367,21 @@ class TransmitterOpinionSerializer(serializers.ModelSerializer):
scholar_name = LocalizedField() scholar_name = LocalizedField()
opinion_text = LocalizedField() opinion_text = LocalizedField()
status = serializers.SerializerMethodField() status = serializers.SerializerMethodField()
scholar = serializers.SerializerMethodField()
class Meta: class Meta:
model = TransmitterOpinion model = TransmitterOpinion
fields = ['id','transmitter','scholar_name','opinion_text','status']
fields = ['id','transmitter','scholar_name','scholar','opinion_text','status']
def get_scholar(self, obj):
request = self.context.get('request')
if obj.scholar:
return {
'id': obj.scholar.id,
'name': get_localized_text(obj.scholar.name, request),
'slug': obj.scholar.slug
}
return None
def get_status(self, obj): def get_status(self, obj):
"""Serialize the opinion status foreign key""" """Serialize the opinion status foreign key"""
@ -490,6 +502,11 @@ class TransmitterSyncSerializer(serializers.ModelSerializer):
{ {
'id': opinion.id, 'id': opinion.id,
'scholar_name': get_localized_text(opinion.scholar_name, request), 'scholar_name': get_localized_text(opinion.scholar_name, request),
'scholar': {
'id': opinion.scholar.id,
'name': get_localized_text(opinion.scholar.name, request),
'slug': opinion.scholar.slug
} if opinion.scholar else None,
'opinion_text': get_localized_text(opinion.opinion_text, request), 'opinion_text': get_localized_text(opinion.opinion_text, request),
'status': { 'status': {
'id': opinion.status.id, 'id': opinion.status.id,
@ -848,12 +865,13 @@ class HadisDetailSerializer(serializers.ModelSerializer):
) )
reference_images = SerializerMethodField() reference_images = SerializerMethodField()
address = LocalizedField() address = LocalizedField()
category_slug = serializers.CharField(source='category.slug', read_only=True)
# address_details = serializers.SerializerMethodField() # address_details = serializers.SerializerMethodField()
class Meta: class Meta:
model = Hadis model = Hadis
fields = [ fields = [
'id', 'number', 'slug','hadis_status','links','share_link',
'id', 'number', 'slug', 'category_id', 'category_slug', 'hadis_status','links','share_link',
'tags','references','reference_images','address' 'tags','references','reference_images','address'
] ]

Loading…
Cancel
Save