Объединить дату и время в Django Queryset - TypeError - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь объединить дату и время в моем Django Queryset, используя annotate.

TimesheetEntry.objects.exclude(
    timesheet_is_running = False
).filter(
    timesheet_users__userprofile__user_company=request.user.userprofile.user_company
).annotate(
    timesheet_clock_in_time_date=datetime.datetime.combine('timesheet_clock_in_date', 'timesheet_clock_in_time')
).values_list(
    'timesheet_jobs__job_number',
    'timesheet_clock_in_time_date',
)

Но это дает мне TypeError

аргумент объединить ()1 должно быть datetime.date, а не str

1 Ответ

3 голосов
/ 20 марта 2019

Вы не предоставляете значения даты и времени для функции объединения, вы просто предоставляете строки 'timesheet_clock_in_date' и 'timesheet_clock_in_time' в качестве аргументов для объединения функции. Чтобы выполнить операцию объединения в базе данных, вам нужно использовать выражения F вместе с ExpressionWrapper. Вы можете найти больше информации об этом в официальных документах . По сути, вам нужно что-то вроде следующего:

TimesheetEntry.objects.exclude(
    timesheet_is_running = False
).filter(
    timesheet_users__userprofile__user_company=request.user.userprofile.user_company
).annotate(
    timesheet_clock_in_time_date=ExpressionWrapper(
        F('timesheet_clock_in_date')+ F('timesheet_clock_in_time'),
        output_field=DateTimeField()
    )
).values_list(
    'timesheet_jobs__job_number',
    'timesheet_clock_in_time_date',
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...