如何获取Django管理日志条目从最后一小时



在标准Django中,django_admin_log表显示了action_time列中数据库条目更改的日期和时间:

sqlite> select * from django_admin_log;
1|2021-07-18 21:34:01.312033|6|[6] (1960-03-20) Pat Three|[{"changed": {"fields": ["Phy"]}}]|8|1|2
2|2021-07-18 21:47:02.451262|6|[6] (1960-03-20) Pat Three|[{"changed": {"fields": ["Phy"]}}]|8|1|2
3|2021-07-18 22:09:42.689067|6|[6] (1960-03-20) Pat Three|[]|8|1|2
4|2021-07-18 22:09:52.292117|6|[6] (1960-03-20) Pat Three|[{"changed": {"fields": ["Phy"]}}]|8|1|2
5|2021-07-19 12:21:57.715529|9|[9] (1960-03-20) Pat Three|[{"changed": {"fields": ["Phy"]}}]|8|1|2
6|2021-07-19 12:35:22.504624|9|[9] (1960-03-20) Pat Three|[{"changed": {"fields": ["Phy"]}}]|8|1|2
... more entries

我想根据一些比较来查询条目,我假设一个天真的ansatz可以与filter一起工作(在SQLite本身中也是可能的(,所以我想要下面SQL语句的Python等价物:

sqlite> select * from django_admin_log where action_time > '2021-07-20';                    
12|2021-07-20 16:34:00.114548|13|[13] (1960-01-20) Pat Changed|[{"changed": {"fields": ["Family name"]}}]|8|1|2

我以为这会是类似的东西

from django.contrib.admin.models import LogEntry
last_hour_changes = LogEntry.objects.filter(last_hour > action_time)

您可以使用gte--[Doc]查找作为

from django.contrib.admin.models import LogEntry
from django.utils import timezone
from datetime import timedelta
last_hour = timezone.now() - timedelta(hours=1)
last_hour_changes = LogEntry.objects.filter(action_time__gte=last_hour)

您可以使用Now表达式[Django-doc],该表达式将使用;时钟";数据库的。此外,一个优点是,如果在视图中将其用作queryset,则不需要覆盖get_queryset,因为时间戳已经设置为Now():

from datetime import timedelta
from django.db.models.functions import Now
Task.objects.filter(deadline__gte=Now()-timedelta(hours=1))

最新更新