fixes but still nto fixed
This commit is contained in:
@@ -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"""
|
||||
|
||||
Reference in New Issue
Block a user