Browse Source

madhab filter fixed

master
Mohsen Taba 2 weeks ago
parent
commit
101f4a0ac0
  1. 18
      apps/hadis/migrations/0029_booktype_sect.py
  2. 10
      apps/hadis/models/reference.py
  3. 2
      apps/hadis/serializers/serializers_admin.py
  4. 11
      apps/hadis/views/reference_v2.py
  5. 4
      apps/hadis/views_admin.py

18
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'),
),
]

10
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'))

2
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"]

11
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':

4
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)

Loading…
Cancel
Save