[英]How to get Django Admin Log Entries from last hour?
在标准的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))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.