Django project giving me TypeError: combine() takes at most 2 arguments (3 given) when deployed
Django project giving me TypeError: combine() takes at most 2 arguments (3 given) when deployed
我已经在 digitalocean 上部署了我的 django 项目,到目前为止它运行良好,直到我对我在数据库中存储日期时间的方式进行了一些更改。我让他们有时间意识(在他们天真之前)。最终,我解决了所有错误并且我的时间都知道了,并且项目运行良好,直到我将更改拉到我的生产服务器并且当我尝试部署它时,它给了我以下错误:
类型错误:combine() 最多接受 2 个参数(给定 3 个)
这一行:
start_time_in_local_time = datetime.datetime.combine(date, start_time, time_difference)
就上下文而言,每次我尝试与其他用户安排课程时都会发生此错误。我从用户那里收到了时间和时区信息,并且我正在尝试将该课程的开始和结束时间存储在我的数据库中。
代码如下:
def error_check_and_save_lesson(request, lesson, context):
# Get lesson timezone when (re)scheduling lessons
minutes_offset = request.POST.get('timezoneInfo','')
minutes_difference = int(minutes_offset)
time_difference = datetime.timezone(datetime.timedelta(minutes=minutes_difference))
# Get lesson name when (re)scheduling lessons
if not request.POST['name']:
context['name_error'] = True
else:
lesson.name = request.POST['name']
# Get lesson location when (re)scheduling lessons
if not request.POST['location']:
context['location_error'] = True
else:
lesson.location = request.POST['location']
# Get lesson date when (re)scheduling lessons
if not request.POST['date']:
context['date_error'] = True
else:
date = datetime.datetime.strptime(request.POST['date'], '%m/%d/%Y').date() # a date object.
# Get lesson starting time when (re)scheduling lessons
if not request.POST['startingTime']:
context['starting_time_error'] = True
else:
start_time = datetime.datetime.strptime(request.POST['startingTime'], '%I:%M %p').time() # a time object
# Get lesson ending time when (re)scheduling lessons
if not request.POST['endingTime']:
context['ending_time_error'] = True
else:
end_time = datetime.datetime.strptime(request.POST['endingTime'], '%I:%M %p').time()
lesson.tutor = request.user if request.user.profile.user_type == 'tutor' else context['person_to_schedule_with']
lesson.student = request.user if request.user.profile.user_type == 'student' else context['person_to_schedule_with']
if not context.get('name_error') and not context.get('location_error') and not context.get('date_error') and not context.get('starting_time_error') and not context.get('ending_time_error'):
utczone = datetime.timezone(datetime.timedelta(0)) # used to convert times in other timezones to UTC
start_time_in_local_time = datetime.datetime.combine(date, start_time) # THE BUG!
start_time_in_local_time=start_time_in_local_time.replace(tzinfo=time_difference)
end_time_in_local_time = datetime.datetime.combine(date, end_time)
end_time_in_local_time = end_time_in_local_time.replace(tzinfo=time_difference)
lesson.start_time = start_time_in_local_time.astimezone(utczone) # store starting time in UTC
lesson.end_time = end_time_in_local_time.astimezone(utczone) # store ending time in UTC
lesson.created_by = request.user
lesson.save()
context['schedule_success'] = "Your Lesson '" + lesson.name + "' Was Scheduled Successfully"
return context
我已经检查了文档 (https://docs.python.org/3/library/datetime.html),该方法有 3 个参数,我特别困惑,因为在我的项目中导致错误的确切操作(安排课程)在本地工作得很好。我猜这与我的本地数据库是 sqlite 而我的生产数据库是 postgres 有关,但我不确定。
此外,是的,我已将 USE_TZ 更改为 True
Python 2 和 Python 3 对 [= 有不同的签名10=]方法
Python 2 method signature,
datetime.combine(date, time)
datetime.combine(date, time, tzinfo=self.tzinfo)
我已经在 digitalocean 上部署了我的 django 项目,到目前为止它运行良好,直到我对我在数据库中存储日期时间的方式进行了一些更改。我让他们有时间意识(在他们天真之前)。最终,我解决了所有错误并且我的时间都知道了,并且项目运行良好,直到我将更改拉到我的生产服务器并且当我尝试部署它时,它给了我以下错误:
类型错误:combine() 最多接受 2 个参数(给定 3 个)
这一行:
start_time_in_local_time = datetime.datetime.combine(date, start_time, time_difference)
就上下文而言,每次我尝试与其他用户安排课程时都会发生此错误。我从用户那里收到了时间和时区信息,并且我正在尝试将该课程的开始和结束时间存储在我的数据库中。
代码如下:
def error_check_and_save_lesson(request, lesson, context):
# Get lesson timezone when (re)scheduling lessons
minutes_offset = request.POST.get('timezoneInfo','')
minutes_difference = int(minutes_offset)
time_difference = datetime.timezone(datetime.timedelta(minutes=minutes_difference))
# Get lesson name when (re)scheduling lessons
if not request.POST['name']:
context['name_error'] = True
else:
lesson.name = request.POST['name']
# Get lesson location when (re)scheduling lessons
if not request.POST['location']:
context['location_error'] = True
else:
lesson.location = request.POST['location']
# Get lesson date when (re)scheduling lessons
if not request.POST['date']:
context['date_error'] = True
else:
date = datetime.datetime.strptime(request.POST['date'], '%m/%d/%Y').date() # a date object.
# Get lesson starting time when (re)scheduling lessons
if not request.POST['startingTime']:
context['starting_time_error'] = True
else:
start_time = datetime.datetime.strptime(request.POST['startingTime'], '%I:%M %p').time() # a time object
# Get lesson ending time when (re)scheduling lessons
if not request.POST['endingTime']:
context['ending_time_error'] = True
else:
end_time = datetime.datetime.strptime(request.POST['endingTime'], '%I:%M %p').time()
lesson.tutor = request.user if request.user.profile.user_type == 'tutor' else context['person_to_schedule_with']
lesson.student = request.user if request.user.profile.user_type == 'student' else context['person_to_schedule_with']
if not context.get('name_error') and not context.get('location_error') and not context.get('date_error') and not context.get('starting_time_error') and not context.get('ending_time_error'):
utczone = datetime.timezone(datetime.timedelta(0)) # used to convert times in other timezones to UTC
start_time_in_local_time = datetime.datetime.combine(date, start_time) # THE BUG!
start_time_in_local_time=start_time_in_local_time.replace(tzinfo=time_difference)
end_time_in_local_time = datetime.datetime.combine(date, end_time)
end_time_in_local_time = end_time_in_local_time.replace(tzinfo=time_difference)
lesson.start_time = start_time_in_local_time.astimezone(utczone) # store starting time in UTC
lesson.end_time = end_time_in_local_time.astimezone(utczone) # store ending time in UTC
lesson.created_by = request.user
lesson.save()
context['schedule_success'] = "Your Lesson '" + lesson.name + "' Was Scheduled Successfully"
return context
我已经检查了文档 (https://docs.python.org/3/library/datetime.html),该方法有 3 个参数,我特别困惑,因为在我的项目中导致错误的确切操作(安排课程)在本地工作得很好。我猜这与我的本地数据库是 sqlite 而我的生产数据库是 postgres 有关,但我不确定。
此外,是的,我已将 USE_TZ 更改为 True
Python 2 和 Python 3 对 [= 有不同的签名10=]方法
Python 2 method signature,
datetime.combine(date, time)
datetime.combine(date, time, tzinfo=self.tzinfo)