You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
2.1 KiB
54 lines
2.1 KiB
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)))
|
|
|