From 19ac1436bee243dd98d5d61974749d9cc45d70ec Mon Sep 17 00:00:00 2001 From: mohsentaba Date: Mon, 22 Jun 2026 09:52:54 +0330 Subject: [PATCH] transmitter schollar connection to author profile, category slugs returns in hadith detail pages --- .../0020_transmitteropinion_scholar.py | 19 +++++++++++++++ apps/hadis/models/transmitter.py | 8 +++++++ apps/hadis/serializers/hadis.py | 24 ++++++++++++++++--- 3 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 apps/hadis/migrations/0020_transmitteropinion_scholar.py diff --git a/apps/hadis/migrations/0020_transmitteropinion_scholar.py b/apps/hadis/migrations/0020_transmitteropinion_scholar.py new file mode 100644 index 0000000..cfd71c3 --- /dev/null +++ b/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'), + ), + ] diff --git a/apps/hadis/models/transmitter.py b/apps/hadis/models/transmitter.py index f0fd7a1..0e74858 100644 --- a/apps/hadis/models/transmitter.py +++ b/apps/hadis/models/transmitter.py @@ -587,6 +587,14 @@ class TransmitterOpinion(models.Model): verbose_name=_('transmitter'), 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')) opinion_text = models.JSONField(default = list , verbose_name=_('Opinion Text')) status = models.ForeignKey( diff --git a/apps/hadis/serializers/hadis.py b/apps/hadis/serializers/hadis.py index 46cb015..6f102f0 100644 --- a/apps/hadis/serializers/hadis.py +++ b/apps/hadis/serializers/hadis.py @@ -86,6 +86,7 @@ class HadisSyncSerializer(serializers.ModelSerializer): narrators = serializers.SerializerMethodField() explanations = serializers.SerializerMethodField() corrections = serializers.SerializerMethodField() + category_slug = serializers.CharField(source='category.slug', read_only=True) title =LocalizedField() title_narrator = LocalizedField() translation = LocalizedField() @@ -94,7 +95,7 @@ class HadisSyncSerializer(serializers.ModelSerializer): model = Hadis fields = [ # 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 'detail', 'narrators', 'explanations', 'corrections', ] @@ -366,10 +367,21 @@ class TransmitterOpinionSerializer(serializers.ModelSerializer): scholar_name = LocalizedField() opinion_text = LocalizedField() status = serializers.SerializerMethodField() + scholar = serializers.SerializerMethodField() class Meta: 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): """Serialize the opinion status foreign key""" @@ -490,6 +502,11 @@ class TransmitterSyncSerializer(serializers.ModelSerializer): { 'id': opinion.id, '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), 'status': { 'id': opinion.status.id, @@ -848,12 +865,13 @@ class HadisDetailSerializer(serializers.ModelSerializer): ) reference_images = SerializerMethodField() address = LocalizedField() + category_slug = serializers.CharField(source='category.slug', read_only=True) # address_details = serializers.SerializerMethodField() class Meta: model = Hadis 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' ]