Django模型DateTimeField字段保存时报expected string or bytes-like object错误
错误产生原因
t字典中year、month、day、hour对应的取值为字符串类型,datetime()构造函数要求传入的时间维度参数必须为整数,传入非整数类型会触发该类型错误。- 时间类导入不匹配:若仅导入了
import datetime,未执行from datetime import datetime,直接调用datetime()时实际调用的是模块而非类,会出现类型不匹配问题。 - 代码存在语法笔误:你提供的
Order.objects.create代码段末尾使用了大括号},正确写法应为小括号),部分场景下语法解析异常也会连带触发类型错误。
对应解决方法
- 先修正语法笔误,将
create语句末尾的大括号替换为小括号。 - 强制转换时间参数为整数,调整构造代码:
Order.objects.create( ... arrival = datetime( year=int(t['year']), month=int(t['month']), day=int(t['day']), hour=int(t['hour']), tzinfo=timezone.utc ) )
- 检查导入语句,确保符合以下两种规范之一:
- 方式一:
from datetime import datetime,可直接调用datetime()构造时间对象 - 方式二:
import datetime,调用时需写全类路径datetime.datetime()
- 方式一:
- 若项目配置中开启了
USE_TZ = True,建议统一使用Django原生方法生成带时区的时间对象,避免时区兼容问题:
from django.utils import timezone from datetime import datetime arrival_time = timezone.make_aware( datetime(int(t['year']), int(t['month']), int(t['day']), int(t['hour'])), timezone=timezone.utc ) Order.objects.create( ... arrival = arrival_time )
内容的提问来源于stack exchange,提问作者isaac finkelstein
相关产品推荐
相关产品推荐

