使用 django-auditlog,如何显示特定模型的 'actor_id'?
Using django-auditlog, how can I display the 'actor_id' for a particular model?
我创建了一个简单的 Django 应用程序来显示单篇文章。这些文章有许多用户可以编辑的字段。我正在使用包 'django-auditlog' 来记录对这些文章模型的更改。到目前为止,我只是简单地按照 auditlog installation doc 来设置模型历史记录跟踪(以及启用中间件以允许 'actor_id' 被跟踪)。我还添加了在各个模型页面上显示最新更改的示例代码:
<!-- History display -->
<div class="table-responsive">
<table id="history" class="table table-striped table-bordered">
<thead>
<tr>
<th>Actor</th>
<th>Field</th>
<th>From</th>
<th>To</th>
</tr>
</thead>
<tbody>
<!-- Human readable - change to '.changes_dict.' for proper logs -->
{% for key, value in article.history.latest.changes_display_dict.items %}
<tr>
<td>{{ article.history.latest.author_id }}</td>
<td>{{ key }}</td>
<td>{{ value.0|default:"None"|striptags|safe }}</td>
<td>{{ value.1|default:"None"|striptags|safe }}</td>
</tr>
{% empty %}
<p>No history for this item has been logged yet.</p>
{% endfor %}
</tbody>
</table>
</div>
正如我的代码所建议的那样,我正在尝试向历史记录添加一个额外的列 table 以显示谁进行了正在显示的更改。
有没有一种简单的方法可以通过 auditlog 来做到这一点,或者我是否必须对我的 sqlite auditlog db table 创建某种 sql 查询来检索 'author_id'字段?
谢谢!
我在查看 Django AuditLog 的 models file 后找到了答案。如果您使用 django-auditlog 教程中所述的 AuditlogHistoryField() 方法创建历史字段,则无法直接从模型的历史字段中拉出参与者。
相反,我做了以下事情:
在views.py文件中
from auditlog.models import LogEntry
...
dal_log = LogEntry.objects.filter(object_id=article.id)
...
context = {'article': article, 'logs': dal_log}
return render(request, "detail.html", context)
然后在我的模板中,我能够使用指定对象的日志条目(在我的例子中,这些是 'article' 模型)。可能有更简洁的方法,但这对我有用。
我创建了一个简单的 Django 应用程序来显示单篇文章。这些文章有许多用户可以编辑的字段。我正在使用包 'django-auditlog' 来记录对这些文章模型的更改。到目前为止,我只是简单地按照 auditlog installation doc 来设置模型历史记录跟踪(以及启用中间件以允许 'actor_id' 被跟踪)。我还添加了在各个模型页面上显示最新更改的示例代码:
<!-- History display -->
<div class="table-responsive">
<table id="history" class="table table-striped table-bordered">
<thead>
<tr>
<th>Actor</th>
<th>Field</th>
<th>From</th>
<th>To</th>
</tr>
</thead>
<tbody>
<!-- Human readable - change to '.changes_dict.' for proper logs -->
{% for key, value in article.history.latest.changes_display_dict.items %}
<tr>
<td>{{ article.history.latest.author_id }}</td>
<td>{{ key }}</td>
<td>{{ value.0|default:"None"|striptags|safe }}</td>
<td>{{ value.1|default:"None"|striptags|safe }}</td>
</tr>
{% empty %}
<p>No history for this item has been logged yet.</p>
{% endfor %}
</tbody>
</table>
</div>
正如我的代码所建议的那样,我正在尝试向历史记录添加一个额外的列 table 以显示谁进行了正在显示的更改。
有没有一种简单的方法可以通过 auditlog 来做到这一点,或者我是否必须对我的 sqlite auditlog db table 创建某种 sql 查询来检索 'author_id'字段?
谢谢!
我在查看 Django AuditLog 的 models file 后找到了答案。如果您使用 django-auditlog 教程中所述的 AuditlogHistoryField() 方法创建历史字段,则无法直接从模型的历史字段中拉出参与者。
相反,我做了以下事情:
在views.py文件中
from auditlog.models import LogEntry
...
dal_log = LogEntry.objects.filter(object_id=article.id)
...
context = {'article': article, 'logs': dal_log}
return render(request, "detail.html", context)
然后在我的模板中,我能够使用指定对象的日志条目(在我的例子中,这些是 'article' 模型)。可能有更简洁的方法,但这对我有用。