У меня есть простая модель для описания задачи и периода между ее выполнением:
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)
Я хочу иметь возможность запрашивать, используя ORM Django, какие задачи свежие и какие устарели, то есть те, которые должны быть выполнены согласно их расписанию.
В настоящее время я рассчитываю это для конкретной записи без 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))
Как бы я сделал эквивалент с ORM Джанго, чтобы я мог запрашивать все свежие / устаревшие задачи одновременно?
например. Это, очевидно, не работает, но что-то вроде:
Tasks.objects.filter(Q(last_check_timestamp__isnull=True) || Q(last_check_timestamp + datetime.timedelta(seconds=schedule__interval_seconds)))