Ticket #1326: list_display_properties_r2265.diff

File list_display_properties_r2265.diff, 2.8 KB (added by django@…, 19 years ago)

Permit properties in list_display admin setting

  • django/core/management.py

     
    889889                        try:
    890890                            f = opts.get_field(fn)
    891891                        except models.FieldDoesNotExist:
    892                             if not hasattr(cls, fn) or not callable(getattr(cls, fn)):
    893                                 e.add(opts, '"admin.list_display" refers to %r, which isn\'t a field or method.' % fn)
     892                            if not hasattr(cls, fn):
     893                                e.add(opts, '"admin.list_display" refers to %r, which isn\'t a field, attribute, method, or property.' % fn)
    894894                        else:
    895895                            if isinstance(f, models.ManyToManyField):
    896896                                e.add(opts, '"admin.list_display" doesn\'t support ManyToManyFields (%r).' % fn)
  • django/contrib/admin/templatetags/admin_list.py

     
    8080            if field_name == '__repr__':
    8181                header = lookup_opts.verbose_name
    8282            else:
    83                 func = getattr(cl.model, field_name) # Let AttributeErrors propogate.
     83                attr = getattr(cl.model, field_name) # Let AttributeErrors propogate.
    8484                try:
    85                     header = func.short_description
     85                    header = attr.short_description
    8686                except AttributeError:
    87                     header = func.__name__.replace('_', ' ')
     87                    header = field_name.replace('_', ' ')
    8888            # Non-field list_display values don't get ordering capability.
    8989            yield {"text": header}
    9090        else:
     
    113113            # For non-field list_display values, the value is a method
    114114            # name. Execute the method.
    115115            try:
    116                 func = getattr(result, field_name)
    117                 result_repr = str(func())
     116                attr = getattr(result, field_name)
     117                if callable(attr):
     118                    attr = attr()
     119                result_repr = str(attr)
    118120            except AttributeError, ObjectDoesNotExist:
    119121                result_repr = EMPTY_CHANGELIST_VALUE
    120122            else:
    121123                # Strip HTML tags in the resulting text, except if the
    122124                # function has an "allow_tags" attribute set to True.
    123                 if not getattr(func, 'allow_tags', False):
     125                if not getattr(attr, 'allow_tags', False):
    124126                    result_repr = escape(result_repr)
    125127        else:
    126128            field_val = getattr(result, f.attname)
Back to Top