Files
igny8/backend/ADMIN_VIEWS_UPDATE_SUMMARY.md
IGNY8 VPS (Salman) 55dfd5ad19 Enhance Content Management with New Taxonomy and Attribute Models
- Introduced `ContentTaxonomy` and `ContentAttribute` models for improved content categorization and attribute management.
- Updated `Content` model to support new fields for content format, cluster role, and external type.
- Refactored serializers and views to accommodate new models, including `ContentTaxonomySerializer` and `ContentAttributeSerializer`.
- Added new API endpoints for managing taxonomies and attributes, enhancing the content management capabilities.
- Updated admin interfaces for `Content`, `ContentTaxonomy`, and `ContentAttribute` to reflect new structures and improve usability.
- Implemented backward compatibility for existing attribute mappings.
- Enhanced filtering and search capabilities in the API for better content retrieval.
2025-11-22 00:21:00 +00:00

12 KiB

Admin & Views Update Summary

Date: November 21, 2025
Status: COMPLETED


Overview

Updated all Django admin interfaces, API views, filters, and serializers to use the new unified content architecture.


Writer Module Updates

Admin (igny8_core/modules/writer/admin.py)

1. TasksAdmin - Simplified & Deprecated Fields Marked

list_display = ['title', 'site', 'sector', 'status', 'cluster', 'created_at']
list_filter = ['status', 'site', 'sector', 'cluster']
readonly_fields = ['content_type', 'content_structure', 'entity_type', 'cluster_role', 'assigned_post_id', 'post_url']

Changes:

  • Removed content_type and word_count from list display
  • Added fieldsets with "Deprecated Fields" section (collapsed)
  • Marked 6 deprecated fields as read-only

2. ContentAdmin - Enhanced with New Structure

list_display = ['title', 'entity_type', 'content_format', 'cluster_role', 'site', 'sector', 'source', 'sync_status', 'word_count', 'generated_at']
list_filter = ['entity_type', 'content_format', 'cluster_role', 'source', 'sync_status', 'status', 'site', 'sector', 'generated_at']
filter_horizontal = ['taxonomies']
readonly_fields = ['categories', 'tags']

Changes:

  • Added entity_type, content_format, cluster_role to list display
  • Added source, sync_status filters
  • Added taxonomies M2M widget (filter_horizontal)
  • Organized into 7 fieldsets:
    • Basic Info
    • Content Classification
    • Content
    • SEO
    • Taxonomies & Attributes
    • WordPress Sync
    • Optimization
    • Deprecated Fields (collapsed)

3. ContentTaxonomyAdmin - NEW

list_display = ['name', 'taxonomy_type', 'slug', 'parent', 'external_id', 'external_taxonomy', 'sync_status', 'count', 'site', 'sector']
list_filter = ['taxonomy_type', 'sync_status', 'site', 'sector', 'parent']
filter_horizontal = ['clusters']

Features:

  • Full CRUD for categories, tags, product attributes
  • WordPress sync fields visible
  • Semantic cluster mapping via M2M widget
  • Hierarchical taxonomy support (parent field)

4. ContentAttributeAdmin - NEW

list_display = ['name', 'value', 'attribute_type', 'content', 'cluster', 'external_id', 'source', 'site', 'sector']
list_filter = ['attribute_type', 'source', 'site', 'sector']

Features:

  • Product specs, service modifiers, semantic facets
  • WordPress/WooCommerce sync fields
  • Link to content or cluster

Views (igny8_core/modules/writer/views.py)

1. TasksViewSet - Simplified Filters

filterset_fields = ['status', 'cluster_id']  # Removed deprecated fields

2. ContentViewSet - Enhanced Filters

queryset = Content.objects.select_related('task', 'site', 'sector', 'cluster').prefetch_related('taxonomies', 'attributes')
filterset_fields = [
    'task_id', 
    'status', 
    'entity_type',  # NEW
    'content_format',  # NEW
    'cluster_role',  # NEW
    'source',  # NEW
    'sync_status',  # NEW
    'cluster',
    'external_type',  # NEW
]
search_fields = ['title', 'meta_title', 'primary_keyword', 'external_url']  # Added external_url
ordering_fields = ['generated_at', 'updated_at', 'word_count', 'status', 'entity_type', 'content_format']

Changes:

  • Added 5 new filter fields for unified structure
  • Optimized queryset with select_related & prefetch_related
  • Added external_url to search fields

3. ContentTaxonomyViewSet - NEW

Endpoint: /api/v1/writer/taxonomies/
Methods: GET, POST, PUT, PATCH, DELETE

filterset_fields = ['taxonomy_type', 'sync_status', 'parent', 'external_id', 'external_taxonomy']
search_fields = ['name', 'slug', 'description', 'external_taxonomy']
ordering = ['taxonomy_type', 'name']

Custom Actions:

  • POST /api/v1/writer/taxonomies/{id}/map_to_cluster/ - Map taxonomy to semantic cluster
  • GET /api/v1/writer/taxonomies/{id}/contents/ - Get all content for taxonomy

4. ContentAttributeViewSet - NEW

Endpoint: /api/v1/writer/attributes/
Methods: GET, POST, PUT, PATCH, DELETE

filterset_fields = ['attribute_type', 'source', 'content', 'cluster', 'external_id']
search_fields = ['name', 'value', 'external_attribute_name', 'content__title']
ordering = ['attribute_type', 'name']

URLs (igny8_core/modules/writer/urls.py)

New Routes Added:

router.register(r'taxonomies', ContentTaxonomyViewSet, basename='taxonomy')
router.register(r'attributes', ContentAttributeViewSet, basename='attribute')

Available Endpoints:

  • /api/v1/writer/tasks/
  • /api/v1/writer/images/
  • /api/v1/writer/content/
  • /api/v1/writer/taxonomies/ NEW
  • /api/v1/writer/attributes/ NEW

Planner Module Updates

Admin (igny8_core/modules/planner/admin.py)

ContentIdeasAdmin - Updated for New Structure

list_display = ['idea_title', 'site', 'sector', 'description_preview', 'site_entity_type', 'cluster_role', 'status', 'keyword_cluster', 'estimated_word_count', 'created_at']
list_filter = ['status', 'site_entity_type', 'cluster_role', 'site', 'sector']
readonly_fields = ['content_structure', 'content_type']

Changes:

  • Replaced content_structure, content_type with site_entity_type, cluster_role in display
  • Marked old fields as read-only in collapsed fieldset
  • Updated filters to use new fields

Fieldsets:

  • Basic Info
  • Content Planning (site_entity_type, cluster_role)
  • Keywords & Clustering
  • Deprecated Fields (collapsed)

Views (igny8_core/modules/planner/views.py)

ContentIdeasViewSet - Updated Filters

filterset_fields = ['status', 'keyword_cluster_id', 'site_entity_type', 'cluster_role']  # Updated

Changes:

  • Replaced content_structure, content_type with site_entity_type, cluster_role

📊 New API Endpoints Summary

Writer Taxonomies

GET    /api/v1/writer/taxonomies/                    # List all taxonomies
POST   /api/v1/writer/taxonomies/                    # Create taxonomy
GET    /api/v1/writer/taxonomies/{id}/               # Get taxonomy
PUT    /api/v1/writer/taxonomies/{id}/               # Update taxonomy
DELETE /api/v1/writer/taxonomies/{id}/               # Delete taxonomy
POST   /api/v1/writer/taxonomies/{id}/map_to_cluster/  # Map to cluster
GET    /api/v1/writer/taxonomies/{id}/contents/      # Get taxonomy contents

Filters:

  • ?taxonomy_type=category (category, tag, product_cat, product_tag, product_attr, service_cat)
  • ?sync_status=imported (native, imported, synced)
  • ?parent=5 (hierarchical filtering)
  • ?external_id=12 (WP term ID)
  • ?external_taxonomy=category (WP taxonomy name)

Search:

  • ?search=SEO (searches name, slug, description)

Writer Attributes

GET    /api/v1/writer/attributes/              # List all attributes
POST   /api/v1/writer/attributes/              # Create attribute
GET    /api/v1/writer/attributes/{id}/         # Get attribute
PUT    /api/v1/writer/attributes/{id}/         # Update attribute
DELETE /api/v1/writer/attributes/{id}/         # Delete attribute

Filters:

  • ?attribute_type=product_spec (product_spec, service_modifier, semantic_facet)
  • ?source=wordpress (blueprint, manual, import, wordpress)
  • ?content=42 (filter by content ID)
  • ?cluster=8 (filter by cluster ID)
  • ?external_id=101 (WP attribute term ID)

Search:

  • ?search=Color (searches name, value, external_attribute_name, content title)

Enhanced Content Filters

GET /api/v1/writer/content/?entity_type=post
GET /api/v1/writer/content/?content_format=listicle
GET /api/v1/writer/content/?cluster_role=hub
GET /api/v1/writer/content/?source=wordpress
GET /api/v1/writer/content/?sync_status=imported
GET /api/v1/writer/content/?external_type=product
GET /api/v1/writer/content/?search=seo+tools

🔄 Backward Compatibility

Deprecated Fields Still Work

Tasks:

  • content_type, content_structure → Read-only in admin
  • Still in database, marked with help text

Content:

  • categories, tags (JSON) → Read-only in admin
  • Data migrated to taxonomies M2M
  • Old fields preserved for transition period

ContentIdeas:

  • content_structure, content_type → Read-only in admin
  • Replaced by site_entity_type, cluster_role

📝 Django Admin Features

New Admin Capabilities

  1. Content Taxonomy Management

    • Create/edit categories, tags, product attributes
    • Map to semantic clusters (M2M widget)
    • View WordPress sync status
    • Hierarchical taxonomy support
  2. Content Attribute Management

    • Create product specs (Color: Blue, Size: Large)
    • Create service modifiers (Location: NYC)
    • Create semantic facets (Target Audience: Enterprise)
    • Link to content or clusters
  3. Enhanced Content Admin

    • Filter by entity_type, content_format, cluster_role
    • Filter by source (igny8, wordpress, shopify)
    • Filter by sync_status (native, imported, synced)
    • Assign taxonomies via M2M widget
    • View WordPress sync metadata
  4. Simplified Task Admin

    • Deprecated fields hidden in collapsed section
    • Focus on core planning fields
    • Read-only access to legacy data

🧪 Testing Checklist

Admin Interface

  • Tasks admin loads without errors
  • Content admin shows new fields
  • ContentTaxonomy admin registered
  • ContentAttribute admin registered
  • ContentIdeas admin updated
  • All deprecated fields marked read-only
  • Fieldsets organized properly

API Endpoints

  • /api/v1/writer/taxonomies/ accessible
  • /api/v1/writer/attributes/ accessible
  • Content filters work with new fields
  • ContentIdeas filters updated
  • No 500 errors on backend restart

Database

  • All migrations applied
  • New tables exist
  • New fields in Content table
  • M2M relationships functional

📚 Usage Examples

Create Taxonomy via API

POST /api/v1/writer/taxonomies/
{
  "name": "SEO",
  "slug": "seo",
  "taxonomy_type": "category",
  "description": "All about SEO",
  "site_id": 5,
  "sector_id": 3
}

Create Product Attribute via API

POST /api/v1/writer/attributes/
{
  "name": "Color",
  "value": "Blue",
  "attribute_type": "product_spec",
  "content": 42,
  "external_id": 101,
  "external_attribute_name": "pa_color",
  "source": "wordpress",
  "site_id": 5,
  "sector_id": 3
}

Filter Content by New Fields

GET /api/v1/writer/content/?entity_type=post&content_format=listicle&cluster_role=hub
GET /api/v1/writer/content/?source=wordpress&sync_status=imported
GET /api/v1/writer/taxonomies/?taxonomy_type=category&sync_status=imported
GET /api/v1/writer/attributes/?attribute_type=product_spec&source=wordpress

🎯 Next Steps

Ready for Frontend Integration

  1. Site Settings → Content Types Tab

    • Display taxonomies from /api/v1/writer/taxonomies/
    • Show attributes from /api/v1/writer/attributes/
    • Enable/disable sync per type
    • Set fetch limits
  2. Content Management

    • Filter content by entity_type, content_format, cluster_role
    • Display WordPress sync status
    • Show assigned taxonomies
    • View product attributes
  3. WordPress Import UI

    • Fetch structure from plugin
    • Create ContentTaxonomy records
    • Import content titles
    • Map to clusters

Summary

All admin interfaces and API views updated to use unified content architecture.

Changes:

  • 3 new admin classes registered
  • 2 new ViewSets added
  • 7 new filter fields in Content
  • 5 new filter fields in Taxonomies
  • 5 new filter fields in Attributes
  • All deprecated fields marked read-only
  • Backward compatibility maintained
  • Backend restart successful
  • No linter errors

New Endpoints:

  • /api/v1/writer/taxonomies/ (full CRUD + custom actions)
  • /api/v1/writer/attributes/ (full CRUD)

Status: Production-ready, fully functional, WordPress integration prepared.