filters fixed for all pages of planner writer
This commit is contained in:
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user