sideabar fixed in dhjanog
This commit is contained in:
@@ -107,3 +107,77 @@ class SiteSectorAdminMixin:
|
||||
return obj.site in accessible_sites
|
||||
return super().has_delete_permission(request, obj)
|
||||
|
||||
|
||||
|
||||
# ============================================================================
|
||||
# Custom ModelAdmin for Sidebar Fix
|
||||
# ============================================================================
|
||||
|
||||
from unfold.admin import ModelAdmin as UnfoldModelAdmin
|
||||
|
||||
|
||||
class Igny8ModelAdmin(UnfoldModelAdmin):
|
||||
"""
|
||||
Custom ModelAdmin that ensures sidebar_navigation is set correctly on ALL pages
|
||||
|
||||
Django's ModelAdmin views don't call AdminSite.each_context(),
|
||||
so we override them to inject our custom sidebar.
|
||||
"""
|
||||
|
||||
def _inject_sidebar_context(self, request, extra_context=None):
|
||||
"""Helper to inject custom sidebar into context"""
|
||||
if extra_context is None:
|
||||
extra_context = {}
|
||||
|
||||
# Get our custom sidebar from the admin site
|
||||
from igny8_core.admin.site import admin_site
|
||||
|
||||
# CRITICAL: Get the full Unfold context (includes all branding, form classes, etc.)
|
||||
# This is what makes the logo/title appear properly
|
||||
unfold_context = admin_site.each_context(request)
|
||||
|
||||
# Get the current path to detect active group
|
||||
current_path = request.path
|
||||
|
||||
sidebar_navigation = admin_site.get_sidebar_list(request)
|
||||
|
||||
# Detect active group and expand it by setting collapsible=False
|
||||
for group in sidebar_navigation:
|
||||
group_is_active = False
|
||||
for item in group.get('items', []):
|
||||
item_link = item.get('link', '')
|
||||
# Check if current path matches this item's link
|
||||
if item_link and current_path.startswith(item_link):
|
||||
item['active'] = True
|
||||
group_is_active = True
|
||||
|
||||
# If any item in this group is active, expand the group
|
||||
if group_is_active:
|
||||
group['collapsible'] = False # Expanded state
|
||||
else:
|
||||
group['collapsible'] = True # Collapsed state
|
||||
|
||||
# Merge Unfold context with our custom sidebar
|
||||
unfold_context['sidebar_navigation'] = sidebar_navigation
|
||||
unfold_context['available_apps'] = admin_site.get_app_list(request, app_label=None)
|
||||
unfold_context['app_list'] = unfold_context['available_apps']
|
||||
|
||||
# Merge with any existing extra_context
|
||||
unfold_context.update(extra_context)
|
||||
|
||||
return unfold_context
|
||||
|
||||
def changelist_view(self, request, extra_context=None):
|
||||
"""Override to inject custom sidebar"""
|
||||
extra_context = self._inject_sidebar_context(request, extra_context)
|
||||
return super().changelist_view(request, extra_context)
|
||||
|
||||
def change_view(self, request, object_id, form_url='', extra_context=None):
|
||||
"""Override to inject custom sidebar"""
|
||||
extra_context = self._inject_sidebar_context(request, extra_context)
|
||||
return super().change_view(request, object_id, form_url, extra_context)
|
||||
|
||||
def add_view(self, request, form_url='', extra_context=None):
|
||||
"""Override to inject custom sidebar"""
|
||||
extra_context = self._inject_sidebar_context(request, extra_context)
|
||||
return super().add_view(request, form_url, extra_context)
|
||||
|
||||
Reference in New Issue
Block a user