Browse Source

enhance transmitters section

script to update madhhab and generation values

enhance search query and filtering params
master
Mohsen Taba 1 month ago
parent
commit
3f97e99642
  1. 7
      apps/hadis/docs.py
  2. 49
      apps/hadis/management/commands/update_transmitters_data.py
  3. 19
      apps/hadis/views/transmitter.py

7
apps/hadis/docs.py

@ -988,6 +988,13 @@ transmitter_list_swagger = swagger_auto_schema(
type=openapi.TYPE_INTEGER, type=openapi.TYPE_INTEGER,
required=False required=False
), ),
openapi.Parameter(
'search',
openapi.IN_QUERY,
description='Search by name, kunya, known_as, or nickname',
type=openapi.TYPE_STRING,
required=False
),
], ],
responses={ responses={
status.HTTP_200_OK: openapi.Response( status.HTTP_200_OK: openapi.Response(

49
apps/hadis/management/commands/update_transmitters_data.py

@ -0,0 +1,49 @@
import random
from django.core.management.base import BaseCommand
from apps.hadis.models.transmitter import Transmitters
class Command(BaseCommand):
help = 'Update all transmitters with random generation (1-10) and random madhab'
def handle(self, *args, **options):
# We use the active madhab choices define in the Transmitters model
# Currently active choices in transmitter.py: SHIA, SUNNI, OTHER, UNKNOWN
madhab_choices = [
Transmitters.MadhhabChoices.SHIA,
Transmitters.MadhhabChoices.SUNNI,
Transmitters.MadhhabChoices.OTHER,
Transmitters.MadhhabChoices.UNKNOWN,
]
# Get all transmitters
transmitters = Transmitters.objects.all()
count = transmitters.count()
if count == 0:
self.stdout.write(self.style.WARNING("No Transmitters found in the database."))
return
self.stdout.write(self.style.WARNING(f'Starting update for {count} transmitters...'))
updated_count = 0
# It's better to iterate through the queryset and save each instance to trigger any save() logic if present
for transmitter in transmitters:
try:
# Assign random generation between 1-10
transmitter.generation = random.randint(1, 10)
# Assign random madhab from available choices
transmitter.madhhab = random.choice(madhab_choices)
# Save the record
transmitter.save()
updated_count += 1
if updated_count % 100 == 0:
self.stdout.write(f'Updated {updated_count}/{count}...')
except Exception as e:
self.stderr.write(self.style.ERROR(f'Error updating transmitter ID {transmitter.id}: {str(e)}'))
self.stdout.write(self.style.SUCCESS(f'Successfully updated {updated_count} transmitters.'))

19
apps/hadis/views/transmitter.py

@ -1,5 +1,5 @@
from django.contrib.admin.utils import lookup_field from django.contrib.admin.utils import lookup_field
from django.db.models import Prefetch
from django.db.models import Prefetch, Q
from rest_framework.generics import ListAPIView , RetrieveAPIView from rest_framework.generics import ListAPIView , RetrieveAPIView
from rest_framework.response import Response from rest_framework.response import Response
@ -25,15 +25,28 @@ class TransmitterView(ListAPIView):
def get_queryset(self): def get_queryset(self):
queryset = Transmitters.objects.all() queryset = Transmitters.objects.all()
# Get query parameters
search_query = self.request.query_params.get('search', None)
status_filter = self.request.query_params.get('status', None) status_filter = self.request.query_params.get('status', None)
madhhab_filter = self.request.query_params.get('madhhab', None)
generation_filter = self.request.query_params.get('generation', None)
# 1. Apply search filter (Searching across name-related JSONFields)
if search_query:
queryset = queryset.filter(
Q(full_name__icontains=search_query) |
Q(kunya__icontains=search_query) |
Q(known_as__icontains=search_query) |
Q(nickname__icontains=search_query)
)
# 2. Apply categorical filters
if status_filter: if status_filter:
queryset = queryset.filter(reliability__slug=status_filter) queryset = queryset.filter(reliability__slug=status_filter)
madhhab_filter = self.request.query_params.get('madhhab', None)
if madhhab_filter: if madhhab_filter:
queryset = queryset.filter(madhhab=madhhab_filter) queryset = queryset.filter(madhhab=madhhab_filter)
generation_filter = self.request.query_params.get('generation', None)
if generation_filter: if generation_filter:
queryset = queryset.filter(generation=generation_filter) queryset = queryset.filter(generation=generation_filter)

Loading…
Cancel
Save