Вероятно, по умолчанию создается экземпляр во время компиляции, поэтому вы можете обойти это, установив его в начале функции, то есть:
def annotate_time(self, name='time'):
d = timezone.now() - F('datetime_started')
annotation = {
name: Case(
When(
datetime_submitted__isnull=False,
then=((F('datetime_submitted') - F('datetime_started')) / 1000000)
),
When(
task__end_time__lt=timezone.now(),
then=((F('task__end_time') - F('datetime_started')) / 1000000)
),
default=d,
output_field=IntegerField()
)
}
return self.annotate(**annotation)
Возможно, стоит отметить, что значение по умолчанию должно быть константой, поэтому другим способом было бы сделать еще один оператор When
, чтобы охватить остальные случаи