вторник, 12 мая 2009 г.

Последний редактор в admin

Хочу привести пример, как вывести последнего редактора объекта в админке.
Все действия над объектами в django.contrib.admin логируются моделью django.contrib.admin.models.LogEntry, поэтому нам достаточно просто найти последнее действие для выбранного объекта, и получить из него автора.
Пишем:


from django.utils.translation import ugettext_lazy as _
from django.contrib.admin.models import LogEntry
from django.contrib.contenttypes.models import ContentType

def last_editor(obj):
""" Return last editor for object """
ct = ContentType.objects.get_for_model(obj)
pk = obj.pk
l = LogEntry.objects.filter(content_type=ct, object_id=pk).order_by('-action_time')
if l.count():
l = l[0]
return '%s %s - %s' % (l.user.first_name or l.user.username,
l.user.last_name,
l.action_time.strftime('%d %h at %H:%M'))
else:
return _('Nobody or UFO')
last_editor.short_description = _('Last editor')

Подключаем в list_display необходимого ModelAdmin:

class PostAdmin(admin.ModelAdmin):
list_display = ('title', last_editor)

Открываем список постов в админке:

Только важно понимать, что редактирование объектов извне или изнутри приложения — не логируется, только через административный интерфейс.

1 комментарий: