From 101f4a0ac0e73d253e500df6b09e0b795df7030c Mon Sep 17 00:00:00 2001 From: mohsentaba Date: Tue, 7 Jul 2026 15:32:11 +0330 Subject: [PATCH] madhab filter fixed --- apps/hadis/migrations/0029_booktype_sect.py | 18 ++++++++++++++++++ apps/hadis/models/reference.py | 10 ++++++++++ apps/hadis/serializers/serializers_admin.py | 2 +- apps/hadis/views/reference_v2.py | 11 +++++++---- apps/hadis/views_admin.py | 4 ++++ 5 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 apps/hadis/migrations/0029_booktype_sect.py diff --git a/apps/hadis/migrations/0029_booktype_sect.py b/apps/hadis/migrations/0029_booktype_sect.py new file mode 100644 index 0000000..c53e9fd --- /dev/null +++ b/apps/hadis/migrations/0029_booktype_sect.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.12 on 2026-07-07 15:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('hadis', '0028_alter_transmitteropinion_options_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='booktype', + name='sect', + field=models.CharField(choices=[('shia', 'Shia'), ('sunni', 'Sunni')], default='shia', max_length=10, verbose_name='Sect'), + ), + ] diff --git a/apps/hadis/models/reference.py b/apps/hadis/models/reference.py index 43f6a48..d9b037d 100644 --- a/apps/hadis/models/reference.py +++ b/apps/hadis/models/reference.py @@ -49,7 +49,17 @@ class BookTag(models.Model): return f"Tag {self.id}" class BookType(models.Model): + class Sect(models.TextChoices): + SHIA = 'shia', _('Shia') + SUNNI = 'sunni', _('Sunni') + title = models.JSONField(default = list , verbose_name=_('Title')) + sect = models.CharField( + max_length=10, + choices=Sect.choices, + default=Sect.SHIA, + verbose_name=_('Sect') + ) created_at = models.DateTimeField(auto_now_add=True, verbose_name=_('created at')) updated_at = models.DateTimeField(auto_now=True, verbose_name=_('updated at')) diff --git a/apps/hadis/serializers/serializers_admin.py b/apps/hadis/serializers/serializers_admin.py index a77f5b5..1e15cfd 100644 --- a/apps/hadis/serializers/serializers_admin.py +++ b/apps/hadis/serializers/serializers_admin.py @@ -733,7 +733,7 @@ class AdminBookSubjectAreaSerializer(serializers.ModelSerializer): class AdminBookTypeSerializer(serializers.ModelSerializer): class Meta: model = BookType - fields = ["id", "title", "created_at", "updated_at"] + fields = ["id", "title", "sect", "created_at", "updated_at"] read_only_fields = ["id", "created_at", "updated_at"] diff --git a/apps/hadis/views/reference_v2.py b/apps/hadis/views/reference_v2.py index 2727962..bc5a027 100644 --- a/apps/hadis/views/reference_v2.py +++ b/apps/hadis/views/reference_v2.py @@ -132,7 +132,7 @@ class BookReferenceV2ListView(generics.ListAPIView): manual_parameters=[ openapi.Parameter('category', openapi.IN_QUERY, description="Filter by Category/Subject Area ID", type=openapi.TYPE_INTEGER), openapi.Parameter('author', openapi.IN_QUERY, description="Filter by Author ID", type=openapi.TYPE_INTEGER), - openapi.Parameter('sect', openapi.IN_QUERY, description="Filter by Sect/Type ID", type=openapi.TYPE_INTEGER), + openapi.Parameter('madhab', openapi.IN_QUERY, description="Filter by Madhab ('shia' or 'sunni') or Type ID", type=openapi.TYPE_STRING, enum=['shia', 'sunni']), openapi.Parameter('pdf_available', openapi.IN_QUERY, description="Filter by PDF availability ('true' or 'false')", type=openapi.TYPE_STRING), openapi.Parameter('century', openapi.IN_QUERY, description="Filter by Century (e.g. '1', '2', 'before_islam')", type=openapi.TYPE_STRING), openapi.Parameter('search', openapi.IN_QUERY, description="Search term for book title, description, or author name", type=openapi.TYPE_STRING), @@ -161,9 +161,12 @@ class BookReferenceV2ListView(generics.ListAPIView): if author: qs = qs.filter(authors__id=author) - sect = self.request.query_params.get('sect') - if sect: - qs = qs.filter(type__id=sect) + madhab = self.request.query_params.get('madhab') + if madhab: + if madhab in ['shia', 'sunni']: + qs = qs.filter(type__sect=madhab) + else: + qs = qs.filter(type__id=madhab) pdf_available = self.request.query_params.get('pdf_available') if pdf_available == 'true': diff --git a/apps/hadis/views_admin.py b/apps/hadis/views_admin.py index e2ff32d..63a9c41 100644 --- a/apps/hadis/views_admin.py +++ b/apps/hadis/views_admin.py @@ -528,6 +528,10 @@ class AdminBookReferenceViewSet(ModelViewSet): if type_id and type_id != "all": queryset = queryset.filter(type_id=type_id) + madhab = self.request.query_params.get("madhab") + if madhab and madhab != "all": + queryset = queryset.filter(type__sect=madhab) + subject_area_id = self.request.query_params.get("subject_area") if subject_area_id and subject_area_id != "all": queryset = queryset.filter(subject_area__id=subject_area_id)