Tôi biết câu hỏi này đã cũ, nhưng tính đến ngày nay (Django 1.9), các mục lịch sử của Django mạnh mẽ hơn so với thời điểm của câu hỏi này. Trong dự án hiện tại, tôi cần lấy các mục lịch sử gần đây và đưa chúng vào danh sách thả xuống từ thanh điều hướng. Đây là cách tôi đã làm và rất thẳng thắn:
*views.py*
from django.contrib.admin.models import LogEntry, ADDITION, CHANGE, DELETION
def main(request, template):
logs = LogEntry.objects.exclude(change_message="No fields changed.").order_by('-action_time')[:20]
logCount = LogEntry.objects.exclude(change_message="No fields changed.").order_by('-action_time')[:20].count()
return render(request, template, {"logs":logs, "logCount":logCount})
Như đã thấy trong đoạn mã trên, tôi đang tạo một bộ truy vấn cơ bản từ mô hình LogEntry (django.contrib.admin.models.py là nơi đặt nó trong django 1.9) và loại trừ các mục không có thay đổi nào, sắp xếp nó bằng thời gian hành động và chỉ hiển thị 20 nhật ký đã qua. Tôi cũng nhận được một mặt hàng khác chỉ với số lượng. Nếu bạn nhìn vào mô hình LogEntry, bạn có thể thấy tên trường mà Django đã sử dụng để lấy lại các phần dữ liệu mà bạn cần. Đối với trường hợp cụ thể của tôi, đây là những gì tôi đã sử dụng trong mẫu của mình:
Liên kết đến Hình ảnh Sản phẩm Cuối cùng
*template.html*
<ul class="dropdown-menu">
<li class="external">
<h3><span class="bold">{{ logCount }}</span> Notification(s) </h3>
<a href="{% url 'index' %}"> View All </a>
</li>
{% if logs %}
<ul class="dropdown-menu-list scroller actionlist" data-handle-color="#637283" style="height: 250px;">
{% for log in logs %}
<li>
<a href="javascript:;">
<span class="time">{{ log.action_time|date:"m/d/Y - g:ia" }} </span>
<span class="details">
{% if log.action_flag == 1 %}
<span class="label label-sm label-icon label-success">
<i class="fa fa-plus"></i>
</span>
{% elif log.action_flag == 2 %}
<span class="label label-sm label-icon label-info">
<i class="fa fa-edit"></i>
</span>
{% elif log.action_flag == 3 %}
<span class="label label-sm label-icon label-danger">
<i class="fa fa-minus"></i>
</span>
{% endif %}
{{ log.content_type|capfirst }}: {{ log }}
</span>
</a>
</li>
{% endfor %}
</ul>
{% else %}
<p>{% trans "This object doesn't have a change history. It probably wasn't added via this admin site." %}</p>
{% endif %}
</li>
</ul>