如何从Django日志条目表获取用户名?django-auditlog模板取值求助
Django Auditlog 问题排查与解决方案
一、name字段无法显示的修复方法
django-auditlog的LogEntry模型本身没有name字段,你看到的actor_id是关联用户的ID值,要获取用户名称需要通过actor关联对象访问对应的用户字段:
- 若要显示用户名,模板代码改成:
{% for data in auditlog %} {{ data.actor_id }} - {{ data.actor.username }} {% endfor %} - 若存在无操作人的日志(
actor为None),需添加判断避免模板报错:{% for data in auditlog %} {{ data.actor_id }} - {{ data.actor.username|default:"无操作人" }} {% endfor %} - 如果你想显示用户全名,可替换为
{{ data.actor.get_full_name }}(前提是用户模型配置了全名字段)。
二、提取日志中所有用户名的方法
在视图函数中通过以下方式查询去重的用户名集合:
from auditlog.models import LogEntry from django.contrib.auth.models import User # 方式1:直接获取去重的用户名列表 usernames = LogEntry.objects.filter(actor__isnull=False).values_list('actor__username', flat=True).distinct() # 方式2:获取对应的用户对象集合(如需更多用户信息) users = User.objects.filter(id__in=LogEntry.objects.filter(actor__isnull=False).values_list('actor_id', flat=True)).distinct()
将查询结果传入模板后,即可在模板中遍历展示。
三、本地测试示例项目搭建
你可以快速搭建一个最小化测试项目排查配置问题:
- 创建新Django项目,安装依赖:
pip install django-auditlog - 在
settings.py的INSTALLED_APPS中添加'auditlog' - 给目标模型注册auditlog(以自带
User模型为例):from django.contrib.auth.models import User from auditlog.registry import auditlog auditlog.register(User) - 执行迁移:
python manage.py makemigrations && python manage.py migrate - 编写视图查询日志条目:
from django.shortcuts import render from auditlog.models import LogEntry def audit_log_view(request): auditlog_entries = LogEntry.objects.all() return render(request, 'audit_log.html', {'auditlog': auditlog_entries}) - 编写测试模板验证字段显示,对比自己项目的配置差异,定位问题。
内容的提问来源于stack exchange,提问作者learner
相关产品推荐
相关产品推荐

