1- from django .contrib import admin
1+ from django .contrib import admin , messages
2+ from django .db .models import Count
3+ from django .templatetags .l10n import localize
4+ from django .templatetags .static import static
5+ from django .utils .html import format_html
6+ from django .utils .translation import gettext_lazy as _
27
38from .conf import settings
49from .models import Cookie , CookieGroup , LogItem
@@ -12,7 +17,14 @@ class CookieAdmin(admin.ModelAdmin):
1217
1318
1419class CookieGroupAdmin (admin .ModelAdmin ):
15- list_display = ("varname" , "name" , "is_required" , "is_deletable" , "get_version" )
20+ list_display = (
21+ "varname" ,
22+ "name" ,
23+ "is_required" ,
24+ "is_deletable" ,
25+ "num_cookies" ,
26+ "get_version" ,
27+ )
1628 search_fields = (
1729 "varname" ,
1830 "name" ,
@@ -22,6 +34,23 @@ class CookieGroupAdmin(admin.ModelAdmin):
2234 "is_deletable" ,
2335 )
2436
37+ def get_queryset (self , request ):
38+ qs = super ().get_queryset (request )
39+ self .message_user (request , "warning" , level = messages .WARNING )
40+ return qs .annotate (num_cookies = Count ("cookie" ))
41+
42+ @admin .display (ordering = "num_cookies" , description = _ ("# cookies" ))
43+ def num_cookies (self , obj ):
44+ if (count := obj .num_cookies ) > 0 :
45+ return localize (count )
46+
47+ return format_html (
48+ '{count} <img src="{src}" alt="{alt}">' ,
49+ count = localize (count ),
50+ src = static ("admin/img/icon-alert.svg" ),
51+ alt = _ ("Warning icon for missing cookies in cookie group." ),
52+ )
53+
2554
2655class LogItemAdmin (admin .ModelAdmin ):
2756 list_display = ("action" , "cookiegroup" , "version" , "created" )
0 commit comments