From e11c0fe697b1abe5701fa17df4af2f02f6a33445 Mon Sep 17 00:00:00 2001 From: Viswamedha Nalabotu Date: Fri, 27 Feb 2026 14:23:26 +0000 Subject: [PATCH] Added specific filters for fields --- apps/knowledge/viewsets.py | 19 ++++++++++++------- apps/onboarding/viewsets.py | 31 +++++++++++++++++++------------ config/settings.py | 4 ++++ requirements/django.txt | 1 + 4 files changed, 36 insertions(+), 19 deletions(-) diff --git a/apps/knowledge/viewsets.py b/apps/knowledge/viewsets.py index b071c3d..fc0388d 100644 --- a/apps/knowledge/viewsets.py +++ b/apps/knowledge/viewsets.py @@ -1,5 +1,6 @@ from django.db.models import Q from rest_framework import status +from django_filters.rest_framework import DjangoFilterBackend from rest_framework.parsers import FormParser, MultiPartParser from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response @@ -16,20 +17,19 @@ class TrainingFileViewSet(ModelViewSet): permission_classes = [IsAuthenticated] parser_classes = [MultiPartParser, FormParser] lookup_field = 'uuid' + + filterset_fields = { + 'role__organization__uuid': ['exact'], + 'role__uuid': ['exact'], + } def get_queryset(self): user = self.request.user - queryset = TrainingFile.objects.filter( + return TrainingFile.objects.filter( Q(role__organization__owner=user) | Q(role__organization__members=user) ).distinct() - organization_uuid = self.request.query_params.get('organization_uuid') - if organization_uuid: - queryset = queryset.filter(role__organization__uuid=organization_uuid) - - return queryset - def perform_create(self, serializer): role_uuid = self.request.data.get('role') @@ -69,6 +69,11 @@ class RoleRagDocumentViewSet(ReadOnlyModelViewSet): serializer_class = RoleRagDocumentSerializer permission_classes = [IsAuthenticated] lookup_field = 'uuid' + + filterset_fields = { + 'role__organization__uuid': ['exact'], + 'role__uuid': ['exact'], + } def get_queryset(self): user = self.request.user diff --git a/apps/onboarding/viewsets.py b/apps/onboarding/viewsets.py index 150a09f..34004f4 100644 --- a/apps/onboarding/viewsets.py +++ b/apps/onboarding/viewsets.py @@ -20,19 +20,17 @@ class OnboardingFlowViewSet(ModelViewSet): serializer_class = OnboardingFlowSerializer permission_classes = [IsAuthenticated] lookup_field = 'uuid' + + filterset_fields = { + 'role__uuid': ['exact'], + } def get_queryset(self): user = self.request.user - queryset = OnboardingFlow.objects.filter( + return OnboardingFlow.objects.filter( Q(role__organization__owner=user) | Q(role__organization__members=user) - ).distinct() - - role_uuid = self.request.query_params.get('role') - if role_uuid: - queryset = queryset.filter(role__uuid=role_uuid) - - return queryset.order_by('-created_at') + ).distinct().order_by('-created_at') def destroy(self, request, *args, **kwargs): flow = self.get_object() @@ -75,6 +73,10 @@ class AgentConfigViewSet(ModelViewSet): serializer_class = AgentConfigSerializer permission_classes = [IsAuthenticated] lookup_field = 'uuid' + + filterset_fields = { + 'organization__uuid': ['exact'], + } def get_queryset(self): return AgentConfig.objects.filter(organization__members=self.request.user).distinct() @@ -89,6 +91,10 @@ class OnboardingSessionViewSet(ModelViewSet): serializer_class = OnboardingSessionSerializer permission_classes = [IsAuthenticated] lookup_field = 'uuid' + + filterset_fields = { + 'role__uuid': ['exact'], + } def get_queryset(self): user = self.request.user @@ -97,10 +103,6 @@ class OnboardingSessionViewSet(ModelViewSet): else: queryset = OnboardingSession.objects.filter(user=user) - role_uuid = self.request.query_params.get('role') - if role_uuid: - queryset = queryset.filter(role__uuid=role_uuid) - return queryset.order_by('-created_at') @action(detail=True, methods=['post'], url_path='interact') @@ -164,6 +166,11 @@ class AgentInteractionLogViewSet(ReadOnlyModelViewSet): serializer_class = AgentInteractionLogSerializer permission_classes = [IsAuthenticated] lookup_field = 'uuid' + + filterset_fields = { + 'session__uuid': ['exact'], + 'session__role__uuid': ['exact'], + } def get_queryset(self): return AgentInteractionLog.objects.filter( diff --git a/config/settings.py b/config/settings.py index 99c5a5a..7ab3985 100644 --- a/config/settings.py +++ b/config/settings.py @@ -64,6 +64,7 @@ DJANGO_APPS = [ ] THIRD_PARTY_APPS = [ 'rest_framework', + 'django_filters', 'channels', 'django_celery_results', 'corsheaders', @@ -172,6 +173,9 @@ REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.AllowAny', ], + 'DEFAULT_FILTER_BACKENDS': [ + 'django_filters.rest_framework.DjangoFilterBackend', + ], } CELERY_BROKER_URL = DJANGO_CELERY_BROKER_URL diff --git a/requirements/django.txt b/requirements/django.txt index 428be04..078be5e 100644 --- a/requirements/django.txt +++ b/requirements/django.txt @@ -6,6 +6,7 @@ django==6.0.2 django-celery-results==2.6.0 django-cors-headers==4.9.0 djangorestframework==3.16.1 +django-filter==25.2 django-unfold==0.81.0 httpx==0.28.1 pgvector==0.4.2