fixes but still nto fixed

This commit is contained in:
IGNY8 VPS (Salman)
2026-01-15 04:13:54 +00:00
parent e02ba76451
commit 75785aa642
12 changed files with 1037 additions and 80 deletions

View File

@@ -824,6 +824,108 @@ class ContentViewSet(SiteSectorModelViewSet):
else:
serializer.save()
@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.
"""
import logging
logger = logging.getLogger(__name__)
try:
queryset = self.get_queryset()
# Get distinct statuses
statuses = list(set(queryset.values_list('status', flat=True)))
statuses = sorted([s for s in statuses if s])
status_labels = {
'draft': 'Draft',
'review': 'Review',
'approved': 'Approved',
'published': 'Published',
}
status_options = [
{'value': s, 'label': status_labels.get(s, s.title())}
for s in statuses
]
# Get distinct site_status
site_statuses = list(set(queryset.values_list('site_status', flat=True)))
site_statuses = sorted([s for s in site_statuses if s])
site_status_labels = {
'not_published': 'Not Published',
'scheduled': 'Scheduled',
'publishing': 'Publishing',
'published': 'Published',
'failed': 'Failed',
}
site_status_options = [
{'value': s, 'label': site_status_labels.get(s, s.replace('_', ' ').title())}
for s in site_statuses
]
# Get distinct content_types
content_types = list(set(queryset.values_list('content_type', flat=True)))
content_types = sorted([t for t in content_types if t])
type_labels = {
'post': 'Post',
'page': 'Page',
'product': 'Product',
'taxonomy': 'Taxonomy',
}
content_type_options = [
{'value': t, 'label': type_labels.get(t, t.title())}
for t in content_types
]
# Get distinct content_structures
structures = list(set(queryset.values_list('content_structure', flat=True)))
structures = sorted([s for s in structures if s])
structure_labels = {
'article': 'Article', 'guide': 'Guide', 'comparison': 'Comparison',
'review': 'Review', 'listicle': 'Listicle', 'landing_page': 'Landing Page',
'business_page': 'Business Page', 'service_page': 'Service Page',
'general': 'General', 'cluster_hub': 'Cluster Hub',
'product_page': 'Product Page', 'category_archive': 'Category Archive',
'tag_archive': 'Tag Archive', 'attribute_archive': 'Attribute Archive',
}
content_structure_options = [
{'value': s, 'label': structure_labels.get(s, s.replace('_', ' ').title())}
for s in structures
]
# Get distinct sources
sources = list(set(queryset.values_list('source', flat=True)))
sources = sorted([s for s in sources if s])
source_labels = {
'igny8': 'IGNY8',
'wordpress': 'WordPress',
}
source_options = [
{'value': s, 'label': source_labels.get(s, s.title())}
for s in sources
]
return success_response(
data={
'statuses': status_options,
'site_statuses': site_status_options,
'content_types': content_type_options,
'content_structures': content_structure_options,
'sources': source_options,
},
request=request
)
except Exception as e:
logger.error(f"Error in filter_options: {str(e)}", exc_info=True)
return error_response(
error=f'Failed to fetch filter options: {str(e)}',
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
request=request
)
@action(detail=False, methods=['POST'], url_path='bulk_delete', url_name='bulk_delete')
def bulk_delete(self, request):
"""Bulk delete content"""