""" Example ======== :: class InboxMessageAdmin(admin.ModelAdmin): list_display = ( '__unicode__', "_link_inbox", "_link_message", 'read', 'read_date', "ctime", "utime", ) list_filter = ("ctime", "utime", "read", ) list_editable = ("read",) date_hierarchy = 'ctime' list_per_page = 50 link_generator(InboxMessageAdmin, "_link_inbox", ["inbox"]) link_generator(InboxMessageAdmin, "_link_message", ["message"]) """ from django.core.urlresolvers import reverse def link_generator(klass, method_name, attr): """ link generator """ def method(self, obj): app_name = obj.__module__.split(".")[0] rel_obj = obj for a in attr: rel_obj = getattr(obj, a) model_name = rel_obj.__class__.__name__.lower() primary_id = rel_obj.id url = reverse('admin:{0}_{1}_changelist'.format(app_name, model_name)) try: return u"{2}.{3}".format( url, primary_id, app_name, model_name) except KeyError: return method.allow_tags = True method.short_description = method_name setattr(klass, method_name, method)