| from django.db import models |
| from django.contrib.contenttypes.models import ContentType |
| from django.contrib.auth.models import User |
| from django.contrib.admin.util import quote |
| from django.utils.translation import ugettext_lazy as _ |
| from django.utils.encoding import smart_unicode |
| from django.utils.safestring import mark_safe |
| |
| ADDITION = 1 |
| CHANGE = 2 |
| DELETION = 3 |
| |
| class LogEntryManager(models.Manager): |
| def log_action(self, user_id, content_type_id, object_id, object_repr, action_flag, change_message=''): |
| e = self.model(None, None, user_id, content_type_id, smart_unicode(object_id), object_repr[:200], action_flag, change_message) |
| e.save() |
| |
| class LogEntry(models.Model): |
| action_time = models.DateTimeField(_('action time'), auto_now=True) |
| user = models.ForeignKey(User) |
| content_type = models.ForeignKey(ContentType, blank=True, null=True) |
| object_id = models.TextField(_('object id'), blank=True, null=True) |
| object_repr = models.CharField(_('object repr'), max_length=200) |
| action_flag = models.PositiveSmallIntegerField(_('action flag')) |
| change_message = models.TextField(_('change message'), blank=True) |
| objects = LogEntryManager() |
| class Meta: |
| verbose_name = _('log entry') |
| verbose_name_plural = _('log entries') |
| db_table = 'django_admin_log' |
| ordering = ('-action_time',) |
| |
| def __repr__(self): |
| return smart_unicode(self.action_time) |
| |
| def is_addition(self): |
| return self.action_flag == ADDITION |
| |
| def is_change(self): |
| return self.action_flag == CHANGE |
| |
| def is_deletion(self): |
| return self.action_flag == DELETION |
| |
| def get_edited_object(self): |
| "Returns the edited object represented by this log entry" |
| return self.content_type.get_object_for_this_type(pk=self.object_id) |
| |
| def get_admin_url(self): |
| """ |
| Returns the admin URL to edit the object represented by this log entry. |
| This is relative to the Django admin index page. |
| """ |
| return mark_safe(u"%s/%s/%s/" % (self.content_type.app_label, self.content_type.model, quote(self.object_id))) |