3 回答
TA贡献1821条经验 获得超6个赞
这个问题被误导了。在Django中创建模型字段时,您并未定义函数,因此函数默认值无关紧要:
from datetime import datetime, timedelta
class MyModel(models.Model):
# default to 1 day from now
my_date = models.DateTimeField(default=datetime.now() + timedelta(days=1))
最后一行没有定义函数;它正在调用一个函数来在类中创建一个字段。
Django 1.7之前的版本
Django 允许您将callable作为默认值传递,并且每次都会调用它,如您所愿:
from datetime import datetime, timedelta
class MyModel(models.Model):
# default to 1 day from now
my_date = models.DateTimeField(default=lambda: datetime.now() + timedelta(days=1))
Django 1.7以上
请注意,自Django 1.7起,不建议将lambda用作默认值(请参阅@stvnw注释)。正确的方法是在字段之前声明一个函数,并将其用作可调用的default_value中的arg:
from datetime import datetime, timedelta
# default to 1 day from now
def get_default_my_date():
return datetime.now() + timedelta(days=1)
class MyModel(models.Model):
my_date = models.DateTimeField(default=get_default_my_date)
- 3 回答
- 0 关注
- 1495 浏览
添加回答
举报