繁体   English   中英

如何从上一小时获取 Django 管理日志条目?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM