filters fixed for all pages of planner writer

This commit is contained in:
IGNY8 VPS (Salman)
2026-01-15 06:19:20 +00:00
parent 51292bb1b3
commit a8309078c6
8 changed files with 372 additions and 206 deletions

View File

@@ -988,18 +988,43 @@ class ContentViewSet(SiteSectorModelViewSet):
@action(detail=False, methods=['get'], url_path='filter_options', url_name='filter_options')
def filter_options(self, request):
"""
Get distinct filter values from current data.
Returns only values that exist in the current site's content.
Get distinct filter values from current data with cascading support.
Returns only values that exist based on other active filters.
"""
import logging
from django.db.models import Q
logger = logging.getLogger(__name__)
try:
queryset = self.get_queryset()
# Get distinct statuses
statuses = list(set(queryset.values_list('status', flat=True)))
# Get filter parameters for cascading
status_filter = request.query_params.get('status', '')
site_status_filter = request.query_params.get('site_status', '')
content_type_filter = request.query_params.get('content_type', '')
content_structure_filter = request.query_params.get('content_structure', '')
source_filter = request.query_params.get('source', '')
search = request.query_params.get('search', '')
# Apply search to base queryset
base_qs = queryset
if search:
base_qs = base_qs.filter(
Q(title__icontains=search) | Q(summary__icontains=search)
)
# Get statuses (filtered by other fields)
status_qs = base_qs
if site_status_filter:
status_qs = status_qs.filter(site_status=site_status_filter)
if content_type_filter:
status_qs = status_qs.filter(content_type=content_type_filter)
if content_structure_filter:
status_qs = status_qs.filter(content_structure=content_structure_filter)
if source_filter:
status_qs = status_qs.filter(source=source_filter)
statuses = list(set(status_qs.values_list('status', flat=True)))
statuses = sorted([s for s in statuses if s])
status_labels = {
'draft': 'Draft',
@@ -1012,8 +1037,17 @@ class ContentViewSet(SiteSectorModelViewSet):
for s in statuses
]
# Get distinct site_status
site_statuses = list(set(queryset.values_list('site_status', flat=True)))
# Get site_statuses (filtered by other fields)
site_status_qs = base_qs
if status_filter:
site_status_qs = site_status_qs.filter(status=status_filter)
if content_type_filter:
site_status_qs = site_status_qs.filter(content_type=content_type_filter)
if content_structure_filter:
site_status_qs = site_status_qs.filter(content_structure=content_structure_filter)
if source_filter:
site_status_qs = site_status_qs.filter(source=source_filter)
site_statuses = list(set(site_status_qs.values_list('site_status', flat=True)))
site_statuses = sorted([s for s in site_statuses if s])
site_status_labels = {
'not_published': 'Not Published',
@@ -1027,8 +1061,17 @@ class ContentViewSet(SiteSectorModelViewSet):
for s in site_statuses
]
# Get distinct content_types
content_types = list(set(queryset.values_list('content_type', flat=True)))
# Get content types (filtered by other fields)
type_qs = base_qs
if status_filter:
type_qs = type_qs.filter(status=status_filter)
if site_status_filter:
type_qs = type_qs.filter(site_status=site_status_filter)
if content_structure_filter:
type_qs = type_qs.filter(content_structure=content_structure_filter)
if source_filter:
type_qs = type_qs.filter(source=source_filter)
content_types = list(set(type_qs.values_list('content_type', flat=True)))
content_types = sorted([t for t in content_types if t])
type_labels = {
'post': 'Post',
@@ -1041,8 +1084,17 @@ class ContentViewSet(SiteSectorModelViewSet):
for t in content_types
]
# Get distinct content_structures
structures = list(set(queryset.values_list('content_structure', flat=True)))
# Get content structures (filtered by other fields)
structure_qs = base_qs
if status_filter:
structure_qs = structure_qs.filter(status=status_filter)
if site_status_filter:
structure_qs = structure_qs.filter(site_status=site_status_filter)
if content_type_filter:
structure_qs = structure_qs.filter(content_type=content_type_filter)
if source_filter:
structure_qs = structure_qs.filter(source=source_filter)
structures = list(set(structure_qs.values_list('content_structure', flat=True)))
structures = sorted([s for s in structures if s])
structure_labels = {
'article': 'Article', 'guide': 'Guide', 'comparison': 'Comparison',
@@ -1057,8 +1109,17 @@ class ContentViewSet(SiteSectorModelViewSet):
for s in structures
]
# Get distinct sources
sources = list(set(queryset.values_list('source', flat=True)))
# Get sources (filtered by other fields)
source_qs = base_qs
if status_filter:
source_qs = source_qs.filter(status=status_filter)
if site_status_filter:
source_qs = source_qs.filter(site_status=site_status_filter)
if content_type_filter:
source_qs = source_qs.filter(content_type=content_type_filter)
if content_structure_filter:
source_qs = source_qs.filter(content_structure=content_structure_filter)
sources = list(set(source_qs.values_list('source', flat=True)))
sources = sorted([s for s in sources if s])
source_labels = {
'igny8': 'IGNY8',