【发布时间】:2011-12-11 02:40:14
【问题描述】:
我有一个简单的模型来描述任务和任务执行之间的时间段:
class Task(models.Model):
last_check_timestamp = models.DateTimeField(blank=True, null=True, db_index=True)
class TaskSchedule(models.Model):
task = models.OneToOneField(Task, blank=False, null=False, related_name='schedule')
interval_seconds = models.IntegerField(blank=False, null=False)
我希望能够使用 Django 的 ORM 查询哪些任务是新鲜的,哪些是陈旧的,这意味着那些应该按照他们的计划运行。
我目前正在通过以下方式为没有 ORM 的特定记录计算此值:
import datetime
task = Task.objects.get(id=123)
fresh = task.last_check_timestamp is not None and datetime.datetime.now() < (task.last_check_timestamp + datetime.timedelta(seconds=task.schedule.interval_seconds))
我将如何使用 Django 的 ORM 做同样的事情,这样我就可以一次查询所有新鲜/陈旧的任务?
例如这显然行不通,但类似于:
Tasks.objects.filter(Q(last_check_timestamp__isnull=True) || Q(last_check_timestamp + datetime.timedelta(seconds=schedule__interval_seconds)))
【问题讨论】:
标签: python django django-orm