Сумма полей продолжительности в Django

У меня возникла небольшая проблема при суммировании двух простых полей длительности. У меня есть две переменные, которые содержат два разных поля продолжительности. В принципе, мне нужно просто просуммировать их, чтобы получить общее время. Проблема в том, что в том, как построена база данных, я не могу использовать Sum или F или ExpressionWrapper, потому что я должен принимать также значения None, а вычисления дают мне значение None в ответ. Я размещаю некоторый код:

views. py

duration_dual = Mission.objects.filter(
    training_course_id=1, solo_flight=False)
total_dual_duration = duration_dual.aggregate(eet=Sum(ExpressionWrapper(
    F('duration_dual'), output_field=IntegerField()), output_field=DurationField()))['eet']
if total_dual_duration != None:
    total_dual_duration = duration(total_dual_duration)

duration_solo = Mission.objects.filter(
        training_course_id=1, solo_flight=True)
    total_solo_duration = duration_solo.aggregate(eet=Sum(ExpressionWrapper(
        F('duration_solo'), output_field=IntegerField()), output_field=DurationField()))['eet']
    if total_solo_duration != None:
        total_solo_duration = duration(total_solo_duration)

models.py

class Mission(models.Model):
name = models.CharField(max_length=200)
duration_dual = models.DurationField(blank=True, null=True)
duration_solo = models.DurationField(blank=True, null=True)
training_course = models.ForeignKey(
    TrainingCourse, on_delete=models.CASCADE)
note = models.TextField(null=True, blank=True)
solo_flight = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

Фактически, мне нужно просто добавить переменные total_solo_duration и total_dual_duration. Я пытался использовать datetime или timedelta, но не могу понять, как правильно это сделать. Заранее большое спасибо

В конце концов я решил проблему довольно простым способом. Я преобразовал в объект datetime свои переменные и добавил их в объект с нулевым временем.

    solo_dur = dt.strptime(total_solo_duration, '%H:%M')
    dual_dur = dt.strptime(total_dual_duration, '%H:%M')
    time_zero = dt.strptime('00:00', '%H:%M')
    total_duration = solo_dur - time_zero + dual_dur
Вернуться на верх