此代码:
import datetime
d_tomorrow = datetime.date.today() + datetime.timedelta(days=1)
class Model(models.Model):
...
timeout = models.DateTimeField(null=True, blank=True, default=d_tomorrow)
...
导致此错误:
'datetime.date' object has no attribute 'date'
我做错了什么?
答案 0 :(得分:13)
d_tomorrow
具有date
属性(显然),但不是。
无论如何,您可能希望使用callable作为默认日期;否则,每个模型的默认日期相对于模型类初始化的时间为“明天”,不创建模型的时间。你可以试试这个:
import datetime
def tomorrow():
return datetime.date.today() + datetime.timedelta(days=1)
class Model(models.Model):
timeout = models.DateTimeField(null=True, blank=True, default=tomorrow)
答案 1 :(得分:2)
问题解决了:
from datetime import datetime, time, date, timedelta
def tomorrow():
d = date.today() + timedelta(days=1)
t = time(0, 0)
return datetime.combine(d, t)
Arrow使这一切变得更加直接。
Arrow是一个Python库,它提供了一种合理的,人性化的方法来创建,操作,格式化和转换日期,时间和时间戳。它实现并更新日期时间类型,填补功能上的空白,并提供支持许多常见创建方案的智能模块API。简而言之,它可以帮助您使用更少的导入和更少的代码来处理日期和时间。
Arrow受到了moment.js和请求的启发。
答案 2 :(得分:2)
使用django.contrib.admin中的模型时遇到此问题。我有两个相似的模型,都有一个日期字段(都使用auto_now_date = True - 完成红鲱鱼);一个工作,一个有这个错误。
原来是
def __unicode__(self):
return self.date
去了BANG,而这个
def __unicode__(self):
return u'%s' % self.date
工作得很好。事后,这种情况很明显,像往常一样。
答案 3 :(得分:0)
这对我有用:
import datetime
from datetime import timedelta
tomorrow = datetime.date.today() + timedelta(days=1)
class Test(models.Model):
timeout = models.DateTimeField(db_index=True, default=tomorrow)
或者您可以使用tomorrow = datetime.datetime.now() + timedelta(days=1)
答案 4 :(得分:-1)
我尝试了你的代码,它运行得很好。您能否以某种方式验证您没有修改/重新定义导入?
也试试这个:
import datetime as DT
d_tomorrow = DT.date.today() + DT.timedelta(days=1)
class Model(models.Model):
timeout = models.DateTimeField(null=True, blank=True, default=d_tomorrow)