duration = timesheet.end_time - timesheet.start_time
Когда вы вычитаете два экземпляра datetime, вы получаете не другой экземпляр datetime, а timedelta instace, который представляет собой разницу в днях, секундах и микросекундах между двумя datetime. Вы не можете хранить временную дельту в поле DateTime, но вы можете использовать IntegerField, например:
days_in_seconds = duration.days * 86400 # days difference by seconds in a day
duration_in_seconds = duration.seconds + days_in_seconds # duration in seconds
Если вы хотите получить доступ к продолжительности как к timedelta, просто сделайте:
import datetime
duration = datetime.timedelta(seconds=timesheet.duration)
Вы также можете сохранить его как FloatField, как предложено в этом вопросе .