Peewee模型字段默认值未生效,DateTimeField显示异常求助
解决Peewee模型默认值不生效的问题
我来帮你排查一下这个问题,你的代码里有几个关键的小错误导致默认值没有按预期工作:
问题分析
- 字段类名大小写错误:你写的
peewee.charField是小写的,而Peewee的字段类都是大驼峰命名(比如CharField、DateTimeField),这个错误会导致字段没有被正确初始化,数据库自然不会使用你设置的默认值。 - DateTimeField默认值的错误设置:你用了
datetime.datetime.now().strftime('%Y-%m-%d')作为默认值——这会在模型类被定义的那一刻就计算出这个字符串值并固定下来,而不是每次插入记录时动态获取当前时间。而且DateTimeField期望接收的是datetime对象,不是字符串,类型不匹配会导致数据库无法解析,最终显示成0000-00-00 00:00:00。
修正后的代码
import peewee import datetime class Example(peewee.Model): id = peewee.IntField(primary_key=True) # 修正字段类名为CharField(大驼峰) text = peewee.CharField(default="waiting") # 传递函数对象而非执行后的结果,让每次插入时动态获取当前时间 dt = peewee.DateTimeField(default=datetime.datetime.now) class Meta: database = your_database_instance # 记得替换成你的实际数据库实例
额外优化建议
如果你只需要存储日期(不需要时间部分),可以改用DateField,更贴合你的需求:
dt = peewee.DateField(default=datetime.date.today)
测试验证
插入仅指定id的记录后,查询验证默认值:
# 插入记录 Example.create(id=1) # 查询并打印结果 record = Example.get(Example.id == 1) print(record.text) # 输出:waiting print(record.dt) # 输出:当前的日期时间(或日期,若用DateField)
内容的提问来源于stack exchange,提问作者Ciasto piekarz
相关产品推荐
相关产品推荐

