Мне кажется, проблема в том, что вы должны указать тип аннотированного столбца для Django как DurationField
.Таким образом, вы можете написать это следующим образом:
from datetime import timedelta
from django.db.models import <b>ExpressionWrapper</b>, F, <b>DurationField</b>
delta = <b>ExpressionWrapper(</b>F("end")-F("start")<b>, DurationField())</b>
intervals = (Interval.objects.exclude(end=None)
.annotate(d=delta)
.filter(d__gt=timedelta(0, 300)))
Это создаст запрос, подобный:
SELECT id, start, end TIMESTAMPDIFF(MICROSECOND, start, end) AS `d`
FROM interval
WHERE TIMESTAMPDIFF(MICROSECOND, start, end) > 300000000
Но мы здесь, таким образом, даем Django подсказку, как интерпретировать поле d
(какDurationField
) и, таким образом, как " сериализует " объект timedelta
).