diff --git a/ADMIN-IMPLEMENTATION-STATUS.md b/ADMIN-IMPLEMENTATION-STATUS.md deleted file mode 100644 index 2886ab0e..00000000 --- a/ADMIN-IMPLEMENTATION-STATUS.md +++ /dev/null @@ -1,155 +0,0 @@ -# Django Admin Implementation Status - -**Last Updated:** December 14, 2025 - ---- - -## Phase Completion Status - -### ✅ Phase 0: Foundation - COMPLETED (Dec 14, 2025) - -**What was completed:** -- [x] Installed django-unfold==0.73.1 -- [x] Configured UNFOLD settings in settings.py -- [x] Updated all admin classes to inherit from Unfold ModelAdmin -- [x] Fixed admin site inheritance (Igny8AdminSite extends UnfoldAdminSite) -- [x] Fixed UserAdmin popup styling (multiple inheritance: BaseUserAdmin + ModelAdmin) -- [x] Updated Celery admin to use Unfold filters -- [x] Configured middleware (simple_history) -- [x] Rebuilt Docker images -- [x] All containers running healthy - -**Result:** Single clean Unfold admin system with no conflicts. All styling handled by Unfold automatically. - ---- - -### ✅ Phase 1: Configuration Cleanup - COMPLETED (Dec 14, 2025) - -**Completed:** -- [x] UserAdmin popup styling fix -- [x] Verified no unused site_building models in site.py (already clean) -- [x] Verified duplicate registrations already commented out in business/billing/admin.py -- [x] Added PlanLimitUsage admin registration -- [x] PlanLimitUsage already in sidebar (Billing & Tenancy group) -- [x] All model links verified working - -**Files modified:** -- `/data/app/igny8/backend/igny8_core/modules/billing/admin.py` - Added PlanLimitUsageAdmin - -**Result:** Admin configuration is clean and organized. All models properly registered and grouped. - ---- - -### ✅ Phase 2: Bulk Operations & Export - COMPLETED (Dec 14, 2025) - -**Completed:** -- [x] Added ExportMixin to Keywords admin (already had export) -- [x] Created KeywordsResource class for export configuration -- [x] Added Unfold advanced filters to Tasks admin (ChoicesDropdownFilter, RelatedDropdownFilter, RangeDateFilter) -- [x] Added Unfold advanced filters to Content admin (RangeNumericFilter for word_count, enhanced search) -- [x] Added Unfold advanced filters to Keywords admin (RangeNumericFilter for volume/difficulty, full filter set) -- [x] Added Unfold advanced filters to Clusters admin (RangeNumericFilter, RangeDateFilter) -- [x] Added Unfold advanced filters to ContentIdeas admin (comprehensive filter set) -- [x] Verified existing bulk actions (Tasks: status changes, Content: status changes, Keywords: cluster assignment) -- [x] Backend restarted successfully - -**Files modified:** -- `/data/app/igny8/backend/igny8_core/modules/writer/admin.py` - Added Unfold filters to TasksAdmin and ContentAdmin -- `/data/app/igny8/backend/igny8_core/modules/planner/admin.py` - Added Unfold filters to KeywordsAdmin, ClustersAdmin, ContentIdeasAdmin - -**Result:** Admin interfaces now have modern date range pickers, numeric sliders, and searchable dropdowns. Better UX for filtering large datasets. - ---- - -### ⚪ Phase 3: Monitoring & Dashboards - NOT STARTED - -**Tasks:** -- [ ] Create Celery task monitoring admin -- [ ] Create custom dashboard view with metrics -- [ ] Create dashboard template -- [ ] Add account health indicators -- [ ] Create alert system -- [ ] Add dashboard route to admin URLs - -**Estimated effort:** 1-2 weeks - ---- - -### ⚪ Phase 4: Analytics & Reporting - NOT STARTED - -**Tasks:** -- [ ] Create reports module (revenue, usage, content, data quality) -- [ ] Create report templates -- [ ] Add chart visualizations -- [ ] Add report links to admin navigation -- [ ] Optimize report queries - -**Estimated effort:** 1 week - ---- - -### ⚪ Phase 5: Advanced Features - NOT STARTED - -**Tasks:** -- [ ] Enable list_editable for Tasks and Keywords -- [ ] Add HistoricalRecords to critical models -- [ ] Create permission groups management command -- [ ] Test permission restrictions - -**Estimated effort:** 1 week - ---- - -## Key Achievements - -1. **✅ NO Custom CSS/Styling Needed** - - Unfold handles all UI/UX automatically - - Modern Tailwind-based design out of the box - - Dark mode support built-in - - Responsive layout automatic - -2. **✅ UserAdmin Popup Fix** - - Fixed popup forms to use Unfold templates - - Multiple inheritance: `class UserAdmin(BaseUserAdmin, ModelAdmin)` - - All popups now consistent with main admin styling - -3. **✅ Clean Architecture** - - Single admin system (Unfold only) - - No conflicts between themes - - All containers healthy - ---- - -## Next Steps - -### Immediate (Next): -1. **✅ Phase 2 Complete** - Move to Phase 3 -2. Start Phase 3: Monitoring & Dashboards -3. Focus on Celery task monitoring and operational metrics - -### Short Term (Next 2 Weeks): -1. Add bulk operations to Tasks, Content, Keywords admins -2. Implement export functionality -3. Add advanced Unfold filters (date range, numeric range) - -### Medium Term (Next Month): -1. Implement Phase 3: Dashboard and monitoring -2. Add Celery task monitoring -3. Create operational dashboard - ---- - -## Technical Notes - -- **No styling work required** - Unfold provides everything -- **Use Unfold classes** - badge, alert, card classes available -- **No emoji icons needed** - Unfold has Material Design icons -- **Focus on functionality** - UI is already handled - ---- - -## Resources - -- **Unfold Documentation:** https://unfoldadmin.com/ -- **Current Admin:** https://api.igny8.com/admin/ -- **Implementation Plan:** `/data/app/igny8/DJANGO-ADMIN-IMPROVEMENT-PLAN.md` diff --git a/DJANGO-ADMIN-IMPROVEMENT-PLAN.md b/DJANGO-ADMIN-IMPROVEMENT-PLAN.md index 5eeae902..4bd50dd4 100644 --- a/DJANGO-ADMIN-IMPROVEMENT-PLAN.md +++ b/DJANGO-ADMIN-IMPROVEMENT-PLAN.md @@ -46,17 +46,11 @@ This caused style conflicts, crashes, and inconsistent UI. - Unfold apps MUST be before `django.contrib.admin` - Configured properly in settings.py -7. **UserAdmin Popup Styling** - User edit form in popup used default Django styling - - Changed `UserAdmin` to inherit from both `BaseUserAdmin` and `ModelAdmin` - - Multiple inheritance preserves Django user functionality + Unfold styling - - Popups now use Unfold templates with modern icons and widgets - **✅ Result: Single Clean Admin System** - **ONLY Unfold** - No more conflicts - Modern, responsive UI with Tailwind CSS - Dark mode support - Advanced filters and bulk operations built-in -- All popups and forms use Unfold styling - All containers running healthy --- @@ -102,21 +96,20 @@ This document outlines a comprehensive improvement plan for the IGNY8 Django Adm ### ✅ Strengths -1. **Modern UI Theme** - Unfold provides beautiful, responsive Tailwind-based design with zero custom CSS -2. **Consistent Styling** - All admin pages, popups, and forms use Unfold templates -3. **Custom Admin Site** - Igny8AdminSite with logical grouping (maintained) -4. **Multi-Tenancy Support** - AccountAdminMixin and SiteSectorAdminMixin -5. **Payment Approval Workflow** - Comprehensive payment approval system -6. **Custom Actions** - API key generation, payment approval/rejection -7. **Field Customization** - Custom fieldsets and readonly fields +1. **Modern UI Theme** - Unfold provides beautiful, responsive Tailwind-based design +2. **Custom Admin Site** - Igny8AdminSite with logical grouping (maintained) +3. **Multi-Tenancy Support** - AccountAdminMixin and SiteSectorAdminMixin +4. **Payment Approval Workflow** - Comprehensive payment approval system +5. **Custom Actions** - API key generation, payment approval/rejection +6. **Field Customization** - Custom fieldsets and readonly fields ### ⚠️ Issues Remaining #### 1. **Sidebar Menu Organization** -- ✅ Current get_app_list() structure works -- Missing PlanLimitUsage model (needs to be added to admin) -- Some empty groups appearing (site_building models don't exist) -- Need to clean up model groupings +- ✅ Current get_app_list() structure works but can be enhanced with Unfold features +- Need to add icons to models for better visual recognition +- Missing PlanLimitUsage model (needs to be added) +- Some empty groups appearing #### 2. **Unused/Empty Models** (Same as before) - **site_building** models referenced but don't exist @@ -179,35 +172,19 @@ This document outlines a comprehensive improvement plan for the IGNY8 Django Adm ## Phase 1: Critical Fixes & Model Updates (Week 1) -### 1.1 Clean Up Sidebar Menu Organization +### 1.1 Remove Unused Models from Admin Site -**Problem:** site_building models referenced but don't exist, causing confusion. Some empty groups appearing. +**Problem:** site_building models referenced but don't exist, causing confusion **Action:** - -1. **Remove non-existent site_building models** from `backend/igny8_core/admin/site.py` custom_groups: - - BusinessType - - AudienceProfile - - BrandPersonality - - HeroImageryDirection - -2. **Add missing PlanLimitUsage model** to Billing group: - ```python - 'Billing & Accounts': { - 'models': [ - ('igny8_core_auth', 'Plan'), - ('billing', 'PlanLimitUsage'), # ADD THIS - ('igny8_core_auth', 'Account'), - # ... rest of models - ], - }, - ``` - -3. **Verify all referenced models exist** - check that each model in custom_groups is actually registered +- Remove from `backend/igny8_core/admin/site.py` custom_groups: + - BusinessType + - AudienceProfile + - BrandPersonality + - HeroImageryDirection **Files to modify:** - `/data/app/igny8/backend/igny8_core/admin/site.py` -- Verify PlanLimitUsage is registered in admin ### 1.2 Resolve Duplicate Model Registrations @@ -258,13 +235,62 @@ class TasksAdmin(SiteSectorAdminMixin, ModelAdmin): - `/data/app/igny8/backend/igny8_core/business/integration/admin.py` - All other admin files -### 1.4 Test Admin Configuration +### 1.4 Add Model Icons for Visual Navigation -**Action:** After cleanup, verify: -- All sidebar groups display correctly -- No 404 errors when clicking model links -- All registered models appear in appropriate groups -- No empty groups in sidebar +**Action:** Add icon declarations to each admin class using Unfold's icon system (Material Symbols): + +```python +class AccountAdmin(AccountAdminMixin, ModelAdmin): + # Add icon for sidebar + icon = "business" # Material symbol name + +class ContentAdmin(SiteSectorAdminMixin, ModelAdmin): + icon = "article" + +class TasksAdmin(SiteSectorAdminMixin, ModelAdmin): + icon = "task" +``` + +**Icon Mapping:** + +| Model | Icon | Material Symbol | +|-------|------|----------------| +| Account | business | Business/company icon | +| Plan | card_membership | Membership card | +| Site | language | Globe/website icon | +| User | person | Person icon | +| Content | article | Article/document | +| Tasks | task | Checkbox list | +| Clusters | bubble_chart | Cluster diagram | +| Keywords | vpn_key | Key icon | +| Payment | payment | Payment icon | +| Invoice | receipt | Receipt icon | +| Automation | settings_suggest | Automation gear | +| Integration | integration_instructions | Integration icon | + +### 1.5 Configure Unfold Colors and Branding + +**Already Done:** Basic UNFOLD configuration in settings.py + +**Additional Customization:** + +```python +# In settings.py UNFOLD dict +"SITE_FAVICONS": [ + { + "rel": "icon", + "sizes": "32x32", + "type": "image/png", + "href": lambda request: static("favicons/favicon-32x32.png"), + }, +], +"SIDEBAR": { + "show_search": True, + "show_all_applications": True, + "navigation": None, # Use get_app_list() from Igny8AdminSite +}, +"THEME": "light", # or "dark" or "auto" +``` --- @@ -592,22 +618,23 @@ File: `backend/igny8_core/templates/admin/dashboard.html` {% block content %}

IGNY8 Admin Dashboard

-
-

Accounts

+

👥 Accounts

{{ accounts.total }} Total Accounts
- {{ accounts.active }} + {{ accounts.active }} Active
- {{ accounts.low_credit }} + + {{ accounts.low_credit }} + Low Credits (< 100)
@@ -615,7 +642,7 @@ File: `backend/igny8_core/templates/admin/dashboard.html`
-

Content Production

+

📝 Content Production

{{ content.this_week }} @@ -626,7 +653,7 @@ File: `backend/igny8_core/templates/admin/dashboard.html` This Month
- {{ content.tasks_pending }} + {{ content.tasks_pending }} Tasks Pending
@@ -634,13 +661,15 @@ File: `backend/igny8_core/templates/admin/dashboard.html`
-

Billing

+

💰 Billing

- {{ billing.pending_payments }} + + {{ billing.pending_payments }} + Pending Approvals - - Review + + Review →
@@ -656,18 +685,20 @@ File: `backend/igny8_core/templates/admin/dashboard.html`
-

Automation

+

🤖 Automation

- {{ automation.running }} + {{ automation.running }} Running Now
- {{ automation.failed_this_week }} + + {{ automation.failed_this_week }} + Failed (7 days) {% if automation.failed_this_week > 0 %} - - Review + + Review → {% endif %}
@@ -676,25 +707,84 @@ File: `backend/igny8_core/templates/admin/dashboard.html`
-

Integration Health

+

🔗 Integration Health

- {{ integration.sync_failed_today }} + + {{ integration.sync_failed_today }} + Failed Syncs Today {% if integration.sync_failed_today > 0 %} - - Review + + Review → {% endif %}
+ + {% endblock %} ``` -**Note:** Unfold automatically provides styling via Tailwind CSS. No custom CSS needed - use Unfold's utility classes if customization is required. - **Update admin site URLs:** ```python @@ -790,17 +880,10 @@ class AccountAdmin(AccountAdminMixin, admin.ModelAdmin): issue_text = ', '.join(issues) if issues else 'Healthy' - # Use Unfold badge classes instead of inline styles - if score >= 80: - badge_class = 'success' - elif score >= 60: - badge_class = 'warning' - else: - badge_class = 'danger' - return format_html( - '{}', - badge_class, issue_text + '{} ' + '{}', + color, icon, color, issue_text ) health_indicator.short_description = 'Health' ``` @@ -889,6 +972,11 @@ class AdminAlerts:
{% for alert in alerts %}
+ + {% if alert.level == 'error' %}🔴{% endif %} + {% if alert.level == 'warning' %}⚠️{% endif %} + {% if alert.level == 'info' %}ℹ️{% endif %} + {{ alert.message }} {{ alert.action }}
@@ -897,8 +985,6 @@ class AdminAlerts: {% endif %} ``` -**Note:** Use Unfold's alert styling classes. No custom CSS or emoji icons needed. - --- ## Phase 4: Analytics & Reporting (Week 7-8) @@ -1240,25 +1326,20 @@ class Command(BaseCommand): ## Implementation Checklist -### ✅ Phase 0: Foundation (COMPLETED - Dec 14, 2025) +### Week 1-2: Critical Fixes & UI Foundation -- [x] Install and configure Unfold theme -- [x] Fix all admin classes to inherit from Unfold ModelAdmin -- [x] Fix UserAdmin popup styling (multiple inheritance) -- [x] Configure UNFOLD settings in settings.py -- [x] Update middleware and INSTALLED_APPS -- [x] Test all containers running - -### Phase 1: Configuration Cleanup (Week 1) - IN PROGRESS - -- [x] Fix UserAdmin popup styling - [ ] Remove unused site_building models from admin site config - [ ] Remove duplicate model registrations (keep modules/ versions) +- [ ] Reorganize sidebar menu with emoji icons and logical groups - [ ] Add PlanLimitUsage to Billing & Accounts group -- [ ] Verify all model links work -- [ ] Test admin configuration +- [ ] Install django-admin-interface or django-grappelli +- [ ] Configure admin theme package +- [ ] Create custom CSS file for status colors and basic styling +- [ ] Create custom base_site.html template +- [ ] Test admin UI improvements +- [ ] Document theme customization options -### Phase 2: Bulk Operations & Export (Week 2-3) - NOT STARTED +### Week 3-4: Operational Features - [ ] Add bulk status update actions to Tasks admin - [ ] Add bulk operations to Content admin @@ -1273,7 +1354,7 @@ class Command(BaseCommand): - [ ] Test all bulk operations - [ ] Test export functionality -### Phase 3: Monitoring & Dashboards (Week 4-5) - NOT STARTED +### Week 5-6: Monitoring & Dashboards - [ ] Install django-celery-results - [ ] Configure Celery to use django-db backend @@ -1290,7 +1371,7 @@ class Command(BaseCommand): - [ ] Test dashboard metrics accuracy - [ ] Test alert system functionality -### Phase 4: Analytics & Reporting (Week 6-7) - NOT STARTED +### Week 7-8: Analytics & Reporting - [ ] Create reports.py module - [ ] Implement revenue_report view @@ -1304,7 +1385,7 @@ class Command(BaseCommand): - [ ] Test all reports with real data - [ ] Optimize report queries for performance -### Phase 5: Advanced Features (Week 8+) - NOT STARTED +### Week 9-10: Advanced Features - [ ] Enable list_editable for Tasks and Keywords - [ ] Install django-simple-history @@ -1326,38 +1407,40 @@ class Command(BaseCommand): ### Python Packages ```txt -# Already installed: -django-unfold==0.73.1 # Modern admin theme (✅ INSTALLED) -django-import-export==3.3.1 # CSV/Excel import/export (✅ INSTALLED) -django-celery-results==2.5.1 # Celery monitoring (✅ INSTALLED) -django-simple-history==3.4.0 # Audit trail (✅ INSTALLED) - -# No additional packages needed for styling - Unfold handles everything +# Add to requirements.txt +django-admin-interface==0.26.0 # Modern admin theme +django-import-export==3.3.1 # CSV/Excel import/export +django-admin-rangefilter==0.11.1 # Date range filters +django-advanced-filters==2.4.0 # Saved filters +django-celery-results==2.5.1 # Celery monitoring +django-simple-history==3.4.0 # Audit trail ``` ### Settings Configuration ```python # backend/igny8_core/settings.py -# ✅ Already configured properly INSTALLED_APPS = [ - 'unfold', # ✅ Already installed - Must be before django.contrib.admin - 'unfold.contrib.filters', # ✅ Already installed - 'unfold.contrib.import_export', # ✅ Already installed - 'unfold.contrib.simple_history', # ✅ Already installed + 'admin_interface', # Must be before django.contrib.admin + 'colorfield', # Required by admin_interface 'igny8_core.admin.apps.Igny8AdminConfig', # ... rest of apps - 'import_export', # ✅ Already installed - 'django_celery_results', # ✅ Already installed - 'simple_history', # ✅ Already installed + 'import_export', + 'rangefilter', + 'advanced_filters', + 'django_celery_results', + 'simple_history', ] -# Celery Results - ✅ Already configured +# Admin Interface Configuration +X_FRAME_OPTIONS = 'SAMEORIGIN' # Required for admin_interface + +# Celery Results CELERY_RESULT_BACKEND = 'django-db' CELERY_CACHE_BACKEND = 'django-cache' -# History Middleware - ✅ Already configured +# History Middleware MIDDLEWARE = [ # ... existing middleware 'simple_history.middleware.HistoryRequestMiddleware', @@ -1365,19 +1448,31 @@ MIDDLEWARE = [ # Import/Export Settings IMPORT_EXPORT_USE_TRANSACTIONS = True - -# UNFOLD configuration - ✅ Already configured in settings.py ``` ### Database Migrations ```bash -# Already completed - no additional migrations needed for Unfold -# Unfold uses Django's existing admin tables +# After adding packages +python manage.py migrate admin_interface +python manage.py migrate django_celery_results +python manage.py migrate simple_history -# For future features: -# python manage.py migrate django_celery_results # When adding Celery monitoring -# python manage.py migrate simple_history # When adding history to models +# Collect static files +python manage.py collectstatic --noinput +``` + +### Static Files Structure + +``` +backend/igny8_core/static/ +├── admin/ +│ ├── css/ +│ │ └── igny8_admin.css +│ └── js/ +│ └── igny8_admin.js +└── charts/ + └── chart.min.js ``` ### Template Structure @@ -1431,10 +1526,12 @@ backend/igny8_core/templates/ If issues arise during implementation: -1. **Unfold Issues (unlikely):** Already stable and working - - Unfold is well-tested and production-ready - - No custom styling to break - - All standard Django admin features work +1. **Theme Issues:** Revert to default Django admin + ```bash + # Remove from INSTALLED_APPS + # 'admin_interface', + python manage.py migrate admin_interface zero + ``` 2. **Duplicate Registration Issues:** - Keep `modules/` admin files active @@ -1536,7 +1633,7 @@ Keep these docs updated: This comprehensive plan transforms the Django admin from a basic management tool into a powerful operational hub. The phased approach ensures steady progress while minimizing disruption. Focus on Phases 1-3 for immediate operational impact, then expand to analytics and advanced features in Phases 4-5. -**Estimated Total Effort:** 2-4 weeks with 1-2 developers (reduced since styling is already complete via Unfold) +**Estimated Total Effort:** 4-6 weeks with 1-2 developers **Priority:** 🔴 High - Critical for efficient operations at scale diff --git a/backend/igny8_core/modules/billing/admin.py b/backend/igny8_core/modules/billing/admin.py index 6014c9cd..6eacf206 100644 --- a/backend/igny8_core/modules/billing/admin.py +++ b/backend/igny8_core/modules/billing/admin.py @@ -12,7 +12,6 @@ from igny8_core.business.billing.models import ( Payment, CreditPackage, PaymentMethodConfig, - PlanLimitUsage, ) from .models import CreditTransaction, CreditUsageLog, AccountPaymentMethod from import_export.admin import ExportMixin @@ -494,46 +493,3 @@ class CreditCostConfigAdmin(ModelAdmin): obj.updated_by = request.user super().save_model(request, obj, form, change) - -@admin.register(PlanLimitUsage) -class PlanLimitUsageAdmin(AccountAdminMixin, ModelAdmin): - """Admin for tracking plan limit usage across billing periods""" - list_display = [ - 'account', - 'limit_type', - 'amount_used', - 'period_display', - 'created_at', - ] - list_filter = [ - 'limit_type', - ('period_start', DateRangeFilter), - ('period_end', DateRangeFilter), - 'account', - ] - search_fields = ['account__name'] - readonly_fields = ['created_at', 'updated_at'] - date_hierarchy = 'period_start' - - fieldsets = ( - ('Usage Info', { - 'fields': ('account', 'limit_type', 'amount_used') - }), - ('Billing Period', { - 'fields': ('period_start', 'period_end') - }), - ('Metadata', { - 'fields': ('metadata',), - 'classes': ('collapse',) - }), - ('Timestamps', { - 'fields': ('created_at', 'updated_at'), - 'classes': ('collapse',) - }), - ) - - def period_display(self, obj): - """Display billing period range""" - return f"{obj.period_start} to {obj.period_end}" - period_display.short_description = 'Billing Period' - diff --git a/backend/igny8_core/modules/planner/admin.py b/backend/igny8_core/modules/planner/admin.py index f05e4d1d..bd2d1893 100644 --- a/backend/igny8_core/modules/planner/admin.py +++ b/backend/igny8_core/modules/planner/admin.py @@ -1,12 +1,6 @@ from django.contrib import admin from django.contrib import messages from unfold.admin import ModelAdmin -from unfold.contrib.filters.admin import ( - RangeDateFilter, - RangeNumericFilter, - RelatedDropdownFilter, - ChoicesDropdownFilter, -) from igny8_core.admin.base import SiteSectorAdminMixin from .models import Keywords, Clusters, ContentIdeas from import_export.admin import ExportMixin @@ -25,13 +19,7 @@ class KeywordsResource(resources.ModelResource): @admin.register(Clusters) class ClustersAdmin(SiteSectorAdminMixin, ModelAdmin): list_display = ['name', 'site', 'sector', 'keywords_count', 'volume', 'status', 'created_at'] - list_filter = [ - ('status', ChoicesDropdownFilter), - ('site', RelatedDropdownFilter), - ('sector', RelatedDropdownFilter), - ('volume', RangeNumericFilter), - ('created_at', RangeDateFilter), - ] + list_filter = ['status', 'site', 'sector'] search_fields = ['name'] ordering = ['name'] autocomplete_fields = ['site', 'sector'] @@ -56,17 +44,8 @@ class ClustersAdmin(SiteSectorAdminMixin, ModelAdmin): class KeywordsAdmin(ExportMixin, SiteSectorAdminMixin, ModelAdmin): resource_class = KeywordsResource list_display = ['keyword', 'seed_keyword', 'site', 'sector', 'cluster', 'volume', 'difficulty', 'intent', 'status', 'created_at'] - list_filter = [ - ('status', ChoicesDropdownFilter), - ('intent', ChoicesDropdownFilter), - ('site', RelatedDropdownFilter), - ('sector', RelatedDropdownFilter), - ('cluster', RelatedDropdownFilter), - ('volume', RangeNumericFilter), - ('difficulty', RangeNumericFilter), - ('created_at', RangeDateFilter), - ] - search_fields = ['keyword', 'seed_keyword__keyword'] + list_filter = ['status', 'seed_keyword__intent', 'site', 'sector', 'seed_keyword__industry', 'seed_keyword__sector'] + search_fields = ['seed_keyword__keyword'] ordering = ['-created_at'] autocomplete_fields = ['cluster', 'site', 'sector', 'seed_keyword'] actions = [ @@ -154,16 +133,7 @@ class KeywordsAdmin(ExportMixin, SiteSectorAdminMixin, ModelAdmin): @admin.register(ContentIdeas) class ContentIdeasAdmin(SiteSectorAdminMixin, ModelAdmin): list_display = ['idea_title', 'site', 'sector', 'description_preview', 'content_type', 'content_structure', 'status', 'keyword_cluster', 'estimated_word_count', 'created_at'] - list_filter = [ - ('status', ChoicesDropdownFilter), - ('content_type', ChoicesDropdownFilter), - ('content_structure', ChoicesDropdownFilter), - ('site', RelatedDropdownFilter), - ('sector', RelatedDropdownFilter), - ('keyword_cluster', RelatedDropdownFilter), - ('estimated_word_count', RangeNumericFilter), - ('created_at', RangeDateFilter), - ] + list_filter = ['status', 'content_type', 'content_structure', 'site', 'sector'] search_fields = ['idea_title', 'target_keywords', 'description'] ordering = ['-created_at'] readonly_fields = ['created_at', 'updated_at'] diff --git a/backend/igny8_core/modules/writer/admin.py b/backend/igny8_core/modules/writer/admin.py index ac57a24b..01592b45 100644 --- a/backend/igny8_core/modules/writer/admin.py +++ b/backend/igny8_core/modules/writer/admin.py @@ -1,12 +1,6 @@ from django.contrib import admin from django.contrib import messages from unfold.admin import ModelAdmin, TabularInline -from unfold.contrib.filters.admin import ( - RangeDateFilter, - RangeNumericFilter, - RelatedDropdownFilter, - ChoicesDropdownFilter, -) from igny8_core.admin.base import SiteSectorAdminMixin from .models import Tasks, Images, Content from igny8_core.business.content.models import ContentTaxonomy, ContentAttribute, ContentTaxonomyRelation, ContentClusterMap @@ -36,15 +30,7 @@ class TaskResource(resources.ModelResource): class TasksAdmin(ExportMixin, SiteSectorAdminMixin, ModelAdmin): resource_class = TaskResource list_display = ['title', 'content_type', 'content_structure', 'site', 'sector', 'status', 'cluster', 'created_at'] - list_filter = [ - ('status', ChoicesDropdownFilter), - ('content_type', ChoicesDropdownFilter), - ('content_structure', ChoicesDropdownFilter), - ('site', RelatedDropdownFilter), - ('sector', RelatedDropdownFilter), - ('cluster', RelatedDropdownFilter), - ('created_at', RangeDateFilter), - ] + list_filter = ['status', 'content_type', 'content_structure', 'site', 'sector', 'cluster'] search_fields = ['title', 'description'] ordering = ['-created_at'] readonly_fields = ['created_at', 'updated_at'] @@ -200,19 +186,9 @@ class ContentResource(resources.ModelResource): @admin.register(Content) class ContentAdmin(ExportMixin, SiteSectorAdminMixin, ModelAdmin): resource_class = ContentResource - list_display = ['title', 'content_type', 'content_structure', 'site', 'sector', 'source', 'status', 'word_count', 'get_taxonomy_count', 'created_at'] - list_filter = [ - ('status', ChoicesDropdownFilter), - ('content_type', ChoicesDropdownFilter), - ('content_structure', ChoicesDropdownFilter), - ('source', ChoicesDropdownFilter), - ('site', RelatedDropdownFilter), - ('sector', RelatedDropdownFilter), - ('cluster', RelatedDropdownFilter), - ('word_count', RangeNumericFilter), - ('created_at', RangeDateFilter), - ] - search_fields = ['title', 'content_html', 'external_url', 'meta_title', 'primary_keyword'] + list_display = ['title', 'content_type', 'content_structure', 'site', 'sector', 'source', 'status', 'get_taxonomy_count', 'created_at'] + list_filter = ['content_type', 'content_structure', 'source', 'status', 'site', 'sector', 'created_at'] + search_fields = ['title', 'content_html', 'external_url'] ordering = ['-created_at'] readonly_fields = ['created_at', 'updated_at', 'word_count', 'get_tags_display', 'get_categories_display'] autocomplete_fields = ['cluster', 'site', 'sector']