|
0
|
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 |
|
|
8 |
|
|
|
9 |
ADDITION = 1 |
|
|
10 |
CHANGE = 2 |
|
|
11 |
DELETION = 3 |
|
|
12 |
|
|
|
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) |
|
|
16 |
e.save() |
|
|
17 |
|
|
|
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() |
|
|
27 |
class Meta: |
|
|
28 |
verbose_name = _('log entry') |
|
|
29 |
verbose_name_plural = _('log entries') |
|
|
30 |
db_table = 'django_admin_log' |
|
|
31 |
ordering = ('-action_time',) |
|
|
32 |
|
|
|
33 |
def __repr__(self): |
|
|
34 |
return smart_unicode(self.action_time) |
|
|
35 |
|
|
|
36 |
def is_addition(self): |
|
|
37 |
return self.action_flag == ADDITION |
|
|
38 |
|
|
|
39 |
def is_change(self): |
|
|
40 |
return self.action_flag == CHANGE |
|
|
41 |
|
|
|
42 |
def is_deletion(self): |
|
|
43 |
return self.action_flag == DELETION |
|
|
44 |
|
|
|
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) |
|
|
48 |
|
|
|
49 |
def get_admin_url(self): |
|
|
50 |
""" |
|
|
51 |
Returns the admin URL to edit the object represented by this log entry. |
|
|
52 |
This is relative to the Django admin index page. |
|
|
53 |
""" |
|
|
54 |
return mark_safe(u"%s/%s/%s/" % (self.content_type.app_label, self.content_type.model, quote(self.object_id))) |