From 985dd2138f7021ababc155559ade8c34d259a5d4 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Wed, 2 Feb 2011 15:21:32 +0000 Subject: [PATCH] Provide a utility function admin_link() for use in admin list pages. - Legacy-Id: 2795 --- ietf/utils/admin.py | 47 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 ietf/utils/admin.py diff --git a/ietf/utils/admin.py b/ietf/utils/admin.py new file mode 100644 index 000000000..bfce0b08a --- /dev/null +++ b/ietf/utils/admin.py @@ -0,0 +1,47 @@ + +def name(obj): + if hasattr(obj, 'abbrev'): + return obj.abbrev() + elif hasattr(obj, 'name'): + if callable(obj.name): + name = obj.name() + else: + name = unicode(obj.name) + if name: + return name + return unicode(obj) + +def admin_link(field, label=None, ordering="", display=name, suffix=""): + if not label: + label = field.capitalize().replace("_", " ").strip() + if ordering == "": + ordering = field + def _link(self): + obj = self + for attr in field.split("__"): + obj = getattr(obj, attr) + if callable(obj): + obj = obj() + if hasattr(obj, "all"): + objects = obj.all() + elif callable(obj): + objects = obj() + if not hasattr(objects, "__iter__"): + objects = [ objects ] + elif hasattr(obj, "__iter__"): + objects = obj + else: + objects = [ obj ] + chunks = [] + for obj in objects: + app = obj._meta.app_label + model = obj.__class__.__name__.lower() + id = obj.pk + chunks += [ u'%(display)s' % + {'app':app, "model": model, "id":id, "display": display(obj), "suffix":suffix, } ] + return u", ".join(chunks) + _link.allow_tags = True + _link.short_description = label + _link.admin_order_field = ordering + return _link +