在Django管理区域中,我需要显示另一个用户上次修改对象的时间。因此,我想利用Django的内置管理日志。我提出了这个解决方案:
class MyModel(models.Model):
...
@property
def admin_last_modified(self):
from django.contrib.admin.models import LogEntry
from django.contrib.contenttypes.models import ContentType
try:
logentry = LogEntry.objects.filter(
object_id=self.pk,
content_type_id=ContentType.objects.get_for_model(self.__class__)
).order_by('action_time')[0]
except:
return ''
return '{} by {}'.format(logentry.action_time, logentry.user)
和管理员类:
@admin.register(MyModel)
class MyAdmin(admin.ModelAdmin):
list_display = ( ..., 'admin_last_modified' )
缺点,对我来说是一个显示阻止,是该列不可分类。
为此,根据我收集的内容,我需要将属性重新制定为某种注释。但我已经尝试过,并没有想出如何做到这一点:
class MyAdmin(admin.ModelAdmin):
def get_queryset(self):
queryset = super().get_queryset(request)
queryset = queryset.annotate(
admin_last_modified=# ???
)
return queryset
我现在正在寻找用问号代替的问题。
如何编写注释,从另一个基本不相关的表中获取一行信息?
答案 0 :(得分:0)
您可以添加LogEntry
DateField
as described here而不是使用auto_add
个对象,并根据它进行排序 - 这也会记录来自外部的实例更改管理面板(LogEntry
仅注册通过管理面板进行的更改)。