我试图合并日期和时间。为此,我使用了datetime.combine
。但这给了AttributeError module 'datetime' has no attribute 'combine'
TimesheetEntry.objects.filter(
timesheet_users = user_id
).order_by(
'-id'
).annotate(
timesheet_clock_in=datetime.combine('timesheet_clock_in_date', 'timesheet_clock_in_time')
).annotate(
timesheet_clock_out=datetime.combine('timesheet_clock_out_date', 'timesheet_clock_out_time')
).values_list(
'timesheet_clock_in',
'timesheet_clock_out',
'timesheet_jobs',
'timesheet_note',
'timesheet_clock_in_by'
)
我知道错误在annotate
中,但我不知道如何解决。查询无需使用annotate
答案 0 :(得分:3)
您正确导入了datetime
吗?
import datetime
# The datetime module
或
from datetime import datetime
# The datetime class in the datetime module
在第一种情况下,您应该致电datetime.datetime.combine
(使用2x datetime
)。在第二种情况下,您可以直接致电datetime.combine
。
答案 1 :(得分:3)
除this answer外,还使用F()
表达式
from django.db.models import F
from datetime import datetime
TimesheetEntry.objects.filter(
timesheet_users=user_id
).order_by(
'-id'
).annotate(
timesheet_clock_in=datetime.combine(F('timesheet_clock_in_date'), F('timesheet_clock_in_time'))
).annotate(
timesheet_clock_out=datetime.combine(F('timesheet_clock_out_date'), F('timesheet_clock_out_time'))
).values_list(
'timesheet_clock_in',
'timesheet_clock_out',
'timesheet_jobs',
'timesheet_note',
'timesheet_clock_in_by'
)
答案 2 :(得分:1)
date.combine()
不起作用,因为它会引发参数1必须是datetime.date,而不是F
from django.db.models import Value
from django.db.models.functions import Cast, Concat
TimesheetEntry.objects.filter(
timesheet_users=user_id
).order_by(
'-id'
).annotate(
timesheet_clock_in=Cast(
Concat('timesheet_clock_in_date', Value(" "), 'timesheet_clock_in_time', output_field=DateTimeField()),
output_field=DateTimeField()
)
timesheet_clock_out=Cast(
Concat('timesheet_clock_out_date', Value(" "), 'timesheet_clock_out_time', output_field=DateTimeField()),
output_field=DateTimeField()
)
).values_list(
'timesheet_clock_in',
'timesheet_clock_out',
'timesheet_jobs',
'timesheet_note',
'timesheet_clock_in_by'
)