Объект datetime.date не имеет атрибута date - PullRequest
7 голосов
/ 09 сентября 2010

Этот код:

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 ]

13 голосов
/ 09 сентября 2010
Ожидается, что

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 голосов
/ 12 марта 2013

У меня была эта проблема при использовании модели из django.contrib.admin.У меня было две похожие модели, обе с полем даты (и обе использовали auto_now_date = True - полная красная сельдь);один работал, у другого была эта ошибка.

Оказалось, что

def __unicode__(self):
    return self.date

идет БАХ, а это

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

работает просто отлично.Что, как обычно, очевидно после события.

2 голосов
/ 10 сентября 2010

Проблема решена:

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 Обновление:

Стрелка делает все это гораздо более простым.

Стрелкабиблиотека Python, которая предлагает разумный, дружественный к человеку подход к созданию, обработке, форматированию и преобразованию дат, времени и временных отметок.Он реализует и обновляет тип datetime, устраняя пробелы в функциональности, и предоставляет API интеллектуального модуля, который поддерживает многие распространенные сценарии создания.Проще говоря, это помогает вам работать с датами и временем с меньшим количеством импорта и намного меньшим количеством кода.

Стрелка в значительной степени вдохновлена ​​moment.js и запросами.

0 голосов
/ 09 сентября 2010

Я опробовал ваш код, и он работал просто отлично.Можете ли вы убедиться, что вы не изменяете / переопределяете импорт каким-либо образом?

Также попробуйте это:

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)
0 голосов
/ 09 сентября 2010

Это работает для меня:

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)

...