Skip to content

Instantly share code, notes, and snippets.

@zacharyvoase
Created August 4, 2009 18:22
Show Gist options
  • Save zacharyvoase/161398 to your computer and use it in GitHub Desktop.
Save zacharyvoase/161398 to your computer and use it in GitHub Desktop.
adminutils (for django.contrib.admin)
# -*- coding: utf-8 -*-
"""
Usage:
from django.contrib import admin
class MyModelAdmin(admin.ModelAdmin):
list_display = ('trunc_name', 'value')
trunc_name = truncate_field('name')
"""
from django.utils.text import capfirst
def attrs(**kwargs):
def attrsetter(function):
for key, value in kwargs.items():
setattr(function, key, value)
return function
return attrsetter
def truncate_field(field_name, verbose_name=None, max_length=50):
if hasattr(field_name, '__call__'):
getter = (lambda fun: lambda obj: fun(obj))(field_name)
if hasattr(field_name, 'verbose_name'):
verbose_name = field_name.verbose_name
elif hasattr(field_name, 'short_description'):
verbose_name = field_name.short_description
if hasattr(field_name, 'field_name'):
field_name = field_name.field_name
else:
field_name = field_name.__name__
else:
getter = lambda obj: getattr(obj, field_name)
if not verbose_name:
verbose_name = capfirst(field_name.replace('_', ' '))
@attrs(
short_description=verbose_name,
admin_order_field=field_name)
def truncated(self, obj):
field = getter(obj)
if len(field) <= max_length:
return field
return field[:(max_length - 3)] + '...'
return truncated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment