При получении продолжительности работы сотрудника от момента присоединения до date.today() в запросе Django, используя объекты F() и DurationField(), я получаю отрицательный результат
Я пишу запрос для получения продолжительности между двумя полями даты. Одно - из модели django (dateField), а другое - просто datetime.date.today(). Я использовал F() объекты для значения столбца модели, чтобы избежать использования памяти.
def duration(self):
emp_duration = Employee.objects.values('empName', 'empJoining').annotate(
duration=(datetime.date.today() - F('empJoining'))
)
return HttpResponse(emp_duration)
Выход:
{'empName': 'xyz', 'empJoining': datetime.date(2003, 1, 21), 'duration': -20028098.0}
{'empName': 'Amna', 'empJoining': datetime.date(2022, 8, 9), 'duration': -20218786.0}
{'empName': 'abc', 'empJoining': datetime.date(2022, 7, 17), 'duration': -20218694.0}
Посмотрите на поле длительности. Я не понимаю, почему оно отрицательное.
Тогда я использовал ExpressionWrapper с выходным полем как DurationField(). Поскольку объектам F() необходим ExpressionWrapper для определения выходных полей.
def duration(self):
emp_duration = Employee.objects.values('empName', 'empJoining').annotate(
duration=ExpressionWrapper(
(datetime.date.today() - F('empJoining')), output_field=DurationField()
)
)
return HttpResponse(emp_duration)
Выход:
{'empName': 'xyz', 'empJoining': datetime.date(2003, 1, 21), 'duration': datetime.timedelta(days=-1, seconds=86379, microseconds=971902)}
{'empName': 'Amna', 'empJoining': datetime.date(2022, 8, 9), 'duration': datetime.timedelta(days=-1, seconds=86379, microseconds=781214)}
{'empName': 'abc', 'empJoining': datetime.date(2022, 7, 17), 'duration': datetime.timedelta(days=-1, seconds=86379, microseconds=781306)}
Разница в днях одинакова в каждом ряду и не является правильным ответом. Вычитание не является правильным. В чем проблема, если кто-то может дать мне лучший подход или указать, что я здесь упускаю, это будет одолжением. Спасибо