Code

Ticket #3287: add_admin_boolean_checkmarks_to_callables.diff

File add_admin_boolean_checkmarks_to_callables.diff, 2.1 KB (added by xian@…, 7 years ago)
Line 
1Index: django/contrib/admin/templatetags/admin_list.py
2===================================================================
3--- django/contrib/admin/templatetags/admin_list.py     (revision 4306)
4+++ django/contrib/admin/templatetags/admin_list.py     (working copy)
5@@ -101,6 +101,10 @@
6                        "url": cl.get_query_string({ORDER_VAR: i, ORDER_TYPE_VAR: new_order_type}),
7                        "class_attrib": (th_classes and ' class="%s"' % ' '.join(th_classes) or '')}
8 
9+def _boolean_icon(field_val):
10+    BOOLEAN_MAPPING = {True: 'yes', False: 'no', None: 'unknown'}
11+    return '<img src="%simg/admin/icon-%s.gif" alt="%s" />' % (settings.ADMIN_MEDIA_PREFIX, BOOLEAN_MAPPING[field_val], field_val)
12+
13 def items_for_result(cl, result):
14     first = True
15     pk = cl.lookup_opts.pk.attname
16@@ -114,9 +118,14 @@
17             try:
18                 attr = getattr(result, field_name)
19                 allow_tags = getattr(attr, 'allow_tags', False)
20+                boolean = getattr(attr, 'boolean', False)
21                 if callable(attr):
22                     attr = attr()
23-                result_repr = str(attr)
24+                if boolean:
25+                    allow_tags = True
26+                    result_repr = _boolean_icon(attr)
27+                else:
28+                    result_repr = str(attr)
29             except (AttributeError, ObjectDoesNotExist):
30                 result_repr = EMPTY_CHANGELIST_VALUE
31             else:
32@@ -147,8 +156,7 @@
33                 row_class = ' class="nowrap"'
34             # Booleans are special: We use images.
35             elif isinstance(f, models.BooleanField) or isinstance(f, models.NullBooleanField):
36-                BOOLEAN_MAPPING = {True: 'yes', False: 'no', None: 'unknown'}
37-                result_repr = '<img src="%simg/admin/icon-%s.gif" alt="%s" />' % (settings.ADMIN_MEDIA_PREFIX, BOOLEAN_MAPPING[field_val], field_val)
38+                result_repr = _boolean_icon(field_val)
39             # FloatFields are special: Zero-pad the decimals.
40             elif isinstance(f, models.FloatField):
41                 if field_val is not None: