Используя django-auditlog, как я могу отобразить 'actor_id' для определенной модели?
Я создал простое приложение 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>
Как следует из моего кода, я пытаюсь добавить дополнительный столбец в таблицу истории, чтобы показать, кто внес изменения, которые отображаются.
Есть ли простой способ сделать это через auditlog, или мне придется создать какой-то sql-запрос к моей таблице sqlite auditlog db для получения поля 'author_id'?
Спасибо!
Я выяснил ответ, просмотрев файл models для Django AuditLog. Невозможно вытащить актора непосредственно из поля истории модели, если вы создали поле истории с помощью метода AuditlogHistoryField(), как описано в учебнике django-auditlog.
Вместо этого я сделал следующее:
В файле views.py
from auditlog.models import LogEntry
...
dal_log = LogEntry.objects.get_for_object(article)
...
context = {'article': article, 'logs': dal_log}
return render(request, "detail.html", context)
Затем в моем шаблоне я мог работать с записями журнала для указанного объекта (в моем случае это были модели 'article'). Возможно, существует более чистый способ, но для меня он сработал.