diff --git a/python/djangobabdd.py b/python/djangobabdd.py new file mode 100644 index 0000000..3beac97 --- /dev/null +++ b/python/djangobabdd.py @@ -0,0 +1,96 @@ +import json +from collections import OrderedDict + +from django.conf import settings +try: + from django.core import urlresolvers +except ImportError: + from django import urls as urlresolvers +try: + from django.urls.exceptions import NoReverseMatch +except ImportError: + from django.core.urlresolvers import NoReverseMatch +from django.utils.html import format_html +from django.utils.safestring import mark_safe + +MAX = 75 + + +class LogEntryAdminMixin(object): + + def created(self, obj): + return obj.timestamp.strftime('%Y-%m-%d %H:%M:%S') + created.short_description = 'Created' + + def user_url(self, obj): + if obj.actor: + app_label, model = settings.AUTH_USER_MODEL.split('.') + viewname = 'admin:%s_%s_change' % (app_label, model.lower()) + try: + link = urlresolvers.reverse(viewname, args=[obj.actor.id]) + except NoReverseMatch: + return u'%s' % (obj.actor) + return format_html(u'{}', link, obj.actor) + + return 'system' + user_url.short_description = 'User' + + def msg_short(self, obj): + if obj.action == 2: + return '' # delete + changes = json.loads(obj.changes) + s = '' if len(changes) == 1 else 's' + fields = ', '.join(changes.keys()) + if len(fields) > MAX: + i = fields.rfind(' ', 0, MAX) + fields = fields[:i] + ' ..' + return '%d change%s: %s' % (len(changes), s, fields) + msg_short.short_description = 'Changes' + + def msg(self, obj): + if obj.action == 2: + return '' # delete + changes = json.loads(obj.changes) + msg = '
| # | Field | From | To |
|---|---|---|---|
| {} | {} | {} | {} |