'datetime.date'对象没有属性'date'

时间:2010-09-09 13:08:57

标签: django datetime django-models

此代码:

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'

我做错了什么?

5 个答案:

答案 0 :(得分:13)

Django ORM预计

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)

2015年更新:

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)