Мне кажется, что проще всего добавить третий столбец с разницей и обновлять его каждый раз, когда объект изменяется следующим образом:
class Timer(models.Model)
start_time = models.DateTimeField()
end_time = models.DateTimeField()
diff_time = models.DateTimeField()
def __init__(self, *args, **kwargs):
super(Timer, self).__init__(*args, **kwargs)
self.diff_time = self.end_time - self.start_time
def save(self, *args, **kwargs):
self.diff_time = self.end_time - self.start_time
super(Timer, self).save(*args, **kwargs)
Я пытался найти решение с аннотацией, но нет поддержки агрегатных функций ни в mysql, ни в postgres.Даже если там где-то, выглядишь как хороший компромисс с дополнительным столбцом, так как нет необходимости вычислять разницу для каждой строки в каждом запросе!
О, и вы можете просто получить то, что вы хотите, вот так:
Timer.objects.values('id', 'diff_time')