Django:DateTimeField仅接受UTC格式,不接受其他格式。

7 浏览
0 Comments

Django:DateTimeField仅接受UTC格式,不接受其他格式。

在数据库中插入的时间是默认的UTC时间,而不是基于时区的时间。我不明白为什么会发生这种情况,尽管我在查询中明确指定了要插入的时间。\n在我的模型中,我有:\n

class leave(models.Model): 
    date_created = models.DateTimeField(auto_now_add=True)

\n在我的设置中,我有:\n

TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

\n在我的视图中,我根据员工所在国家设置时区:\n

if employees.objects.get(emp_id=request.user.username).emp_loc == 'IND':
   tzone=pytz.timezone('Asia/Calcutta')
elif employees.objects.get(emp_id=request.user.username).emp_loc == 'MLA':
   tzone=pytz.timezone('Asia/Manila')
elif employees.objects.get(emp_id=request.user.username).emp_loc == 'MPLS':
   tzone=pytz.timezone('CST6CDT')

\n然后,我创建请假并根据国家更新时区:\n

new_leave = leave.objects.create(employee=employees.objects.get(emp_id = userid.emp_id), start_date=sdt, end_date=edt, ltype=ltyp, message=des,date_created=datetime.now(tzone))
new_leave.save()

\n提前感谢。

0
0 Comments

问题的出现原因:Django的DateTimeField字段只接受UTC格式的时间,不接受其他格式的时间。

解决方法:可以创建一个中间件来处理日期和时间的转换,使用pytz库来处理时区。首先导入需要的库,然后创建一个名为TimezoneMiddleware的中间件类,其中包含process_request方法。在process_request方法中,通过request的session获取时区信息,并根据时区信息激活相应的时区。如果没有时区信息,则停用时区。

最后,可以根据之前提到的条件创建视图。

最好还是像Kevin建议的那样阅读官方文档。

0