问题:
在DRF框架的models.py中有一个字段:
create_time = models.DateTimeField(auto_now_add=True)
问题是在向数据库中插入数据时,此字段会带有6位的微秒,对精度要求没那么高(看着很不爽),需求是去掉微秒:
下面是数据表结构中的create_time字段的建表信息:
原因:
mysql中datetime支持的范围是 1000-01-01 00:00:00.000000 到 9999-12-31 23:59:59.999999。
datetime(n) 表示秒后面的n位微妙,保留/展示最高n位。
解决过程:
尝试以下方法,并不能修改数据库中的6位微秒:
1、在serializers.py中对create_time字段进行额外的限制
class Meta:
model = ServerInfo
fields = '__all__'
## 在extra_kwargs中增加对create_time字段的格式限制
extra_kwargs = {
'create_time':{'format':'%Y-%m-%d %H:%M:%S'},
}
结果是在后台站点起到了作用,但在数据库中还是保留有6位微秒。
2、在settings.py中添加配置项:
REST_FRAMEWORK = {
# 时间格式配置
'DATETIME_FORMAT': "%Y-%m-%d %H:%M:%S", # 日期时间格式配置
'DATE_FORMAT': "%Y-%m-%d"
}
同样在数据库中还是保留有6位微秒。
3、最后无奈只好修改数据表结构中的create_time字段
ALTER TABLE devel.server_info MODIFY COLUMN `create_time` datetime NOT NULL;
问题就解决了。