Приведение результата функции F к int - PullRequest
0 голосов
/ 30 марта 2020

У меня есть простое приложение Django, в котором я пытаюсь объединить несколько значений в аннотацию для упрощения обработки на стороне клиента.

По сути, мне нужно объединить значения нескольких столбцов в один.

Для этого я пытаюсь использовать annotate с F функциями:

qs = TimeReport.objects \
         .filter(year=year, term=term) \
         .annotate(
              created_by_first_name=F('created_by__first_name'),
              created_by_last_name=F('created_by__last_name'),
              total_hours = F('master_thesis_supervision_hours')
                            + F('semester_project_supervision_hours')
                            + F('other_job_hours')
                            + F('MAN_hours')
                            + F('exam_proctoring_and_grading_hours')
                            + F('class_teaching_exam_hours')
                            + F('class_teaching_practical_work_hours')
                            + F('class_teaching_preparation_hours')
                            + F('class_teaching_teaching_hours'),
                            ) \
                .all().values()

Удивительно, но когда я проверяю содержимое вычисляемого поля, оно ничего не содержит:

list(qs)[0]['total_hours']
None

Попытка разыграть результат функции F также не дает:

...
  total_hours = int(F('master_thesis_supervision_hours'))
                +int(F('semester_project_supervision_hours'))
                + ...

Я также пытался обновить models.py, чтобы добавить свойство:

@property
def total_hours(self):
    return self.master_thesis_supervision_hours + self.class_teaching_total_hours + self.semester_project_supervision_hours + self.other_job_hours + self.MAN_hours + self.exam_proctoring_and_grading_hours

и обновите views.py соответственно:

qs = TimeReport.objects \
        .filter(year=year, term=term) \
        .annotate(
            created_by_first_name=F('created_by__first_name'),
            created_by_last_name=F('created_by__last_name'),
            total_hours = F('total_hours'),
            ) \
        .all().values()

Но я получаю следующую ошибку:

django .core.exceptions.FieldError: Не удается разрешить ключевое слово total_hours в поле.

Как правильно это сделать?

...