1 from django
.db
import models
2 from django
.contrib
.contenttypes
.models
import ContentType
3 from django
.contrib
.auth
.models
import User
4 from django
.contrib
.admin
.util
import quote
5 from django
.utils
.translation
import ugettext_lazy
as _
6 from django
.utils
.encoding
import smart_unicode
7 from django
.utils
.safestring
import mark_safe
13 class LogEntryManager(models
.Manager
):
14 def log_action(self
, user_id
, content_type_id
, object_id
, object_repr
, action_flag
, change_message
=''):
15 e
= self
.model(None, None, user_id
, content_type_id
, smart_unicode(object_id
), object_repr
[:200], action_flag
, change_message
)
18 class LogEntry(models
.Model
):
19 action_time
= models
.DateTimeField(_('action time'), auto_now
=True)
20 user
= models
.ForeignKey(User
)
21 content_type
= models
.ForeignKey(ContentType
, blank
=True, null
=True)
22 object_id
= models
.TextField(_('object id'), blank
=True, null
=True)
23 object_repr
= models
.CharField(_('object repr'), max_length
=200)
24 action_flag
= models
.PositiveSmallIntegerField(_('action flag'))
25 change_message
= models
.TextField(_('change message'), blank
=True)
26 objects
= LogEntryManager()
28 verbose_name
= _('log entry')
29 verbose_name_plural
= _('log entries')
30 db_table
= 'django_admin_log'
31 ordering
= ('-action_time',)
34 return smart_unicode(self
.action_time
)
36 def is_addition(self
):
37 return self
.action_flag
== ADDITION
40 return self
.action_flag
== CHANGE
42 def is_deletion(self
):
43 return self
.action_flag
== DELETION
45 def get_edited_object(self
):
46 "Returns the edited object represented by this log entry"
47 return self
.content_type
.get_object_for_this_type(pk
=self
.object_id
)
49 def get_admin_url(self
):
51 Returns the admin URL to edit the object represented by this log entry.
52 This is relative to the Django admin index page.
54 return mark_safe(u
"%s/%s/%s/" % (self
.content_type
.app_label
, self
.content_type
.model
, quote(self
.object_id
)))