You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Peewee模型字段默认值未生效,DateTimeField显示异常求助

解决Peewee模型默认值不生效的问题

我来帮你排查一下这个问题,你的代码里有几个关键的小错误导致默认值没有按预期工作:

问题分析

  1. 字段类名大小写错误:你写的peewee.charField是小写的,而Peewee的字段类都是大驼峰命名(比如CharField、DateTimeField),这个错误会导致字段没有被正确初始化,数据库自然不会使用你设置的默认值。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:12:38