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

datetime.now()无法动态获取当前日期,需实现当前日期减7天默认值

嘿,这个问题我之前也碰到过!你踩的坑是NDB里default参数的一个常见误区——当你直接写datetime.now()+timedelta(days=-7)的时候,这个表达式会在模块第一次加载的时候就计算完成,之后不管过多久,默认值都会是那个固定的时间,完全不是你想要的“动态当前日期减7天”。

别担心,解决方法很简单,NDB的属性支持把可调用函数作为default值,这样每次创建实体的时候都会调用这个函数来生成最新的默认值。

修正后的代码

from google.appengine.ext import ndb
from datetime import datetime, timedelta

# 定义一个返回动态日期的函数
def default_last_login_date():
    return datetime.now() - timedelta(days=7)  # 写成减7天更直观,和加-7天效果一致

class ActivityCount(ndb.Model):
    # 注意这里传的是函数本身,不要加括号!
    last_login_date = ndb.DateTimeProperty(default=default_last_login_date)

为什么这样可行?

  • 当你把函数名(不带括号)传给default时,NDB不会立刻执行它,而是在每次创建新的ActivityCount实体的时候才调用这个函数。
  • 这样每次生成的默认值都是调用函数时的当前日期减去7天,完美实现你想要的动态效果。

之前的错误就是因为直接传了一个计算好的日期值,而不是一个能动态生成值的函数。现在这样改完就没问题啦 😊

内容的提问来源于stack exchange,提问作者Vikram Shinde

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:46:44