代码之家  ›  专栏  ›  技术社区  ›  demux

“datetime.date”对象没有属性“date”

  •  7
  • demux  · 技术社区  · 14 年前

    此代码:

    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 回复  |  直到 9 年前
        1
  •  13
  •   mipadi    14 年前

    d_tomorrow Django ORM希望 date 属性(显然),但不是。

    无论如何,您可能希望对默认日期使用可调用的;否则,相对于模型类初始化的时间,每个模型的默认日期都将是“明天”, 创建模型的时间。你可以试试这个:

    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)
    
        2
  •  2
  •   Steve Brown    11 年前

    我在使用django.contrib.admin的模型时遇到了这个问题。我有两个相似的模型,都有一个日期字段(都使用auto-now-date=true-complete红鲱鱼);一个成功了,一个有这个错误。

    结果是

    def __unicode__(self):
        return self.date
    

    砰的一声,而这个

    def __unicode__(self):
        return u'%s' % self.date
    

    工作很好。就像往常一样,这在事件发生后是很明显的。

        3
  •  2
  •   demux    9 年前

    问题解决:

    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和请求的启发。

        4
  •  0
  •   the_void    14 年前

    这对我很有用:

    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)

        5
  •  -1
  •   Manoj Govindan    14 年前

    我试过你的代码,它运行得很好。您能确认您没有以某种方式修改/重新定义导入吗?

    也试试这个:

    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)