Можно на save Task-а повесить сохранение промежуточных данных.
Да, действительно, это позволяет не вычислять каждый раз последние таски. Это натолкнуло меня на мысль, что не обязательно делать дополнительную таблицу, а можно в модель Task добавить булево поле last, которое методом модели save_model() будет устанавливаться в True. Тогда при выборке тасков можно использовать Task.objects.filter(last=True).
Сделал так:
def save_model(self, request, obj, form, change):
if not change:
super(Task, self).save() # для нового таска last default=True
last = Task.objects.filter(project=self.project, type=self.type, last=True)
for l in last:
l.last = False # перезаписываем значение для предыдущего таска
l.save()
else:
obj.save()
добавте индекс [0], тогда будет только один обект.
Тогда я получу только один таск, который выполнялся самым последним. А мне нужно получить таски для каждой пары "проект"-"тип задания".
Может добавить MAX(end) с GROUP BY.
Не совсем понял. Использовать с aggregate для каждой пары "проект"-"тип задания"?