2014-10-31 3 views
0

У меня есть модель Django (ReportCache), которая хранит отчеты в таблице SQL. Одним из полей в нем является django.db.models.DateTimeField, используемый для хранения последнего обновления отчета.DataError для DateTime?

По какой-то причине я получаю DataError: слишком длинное значение для символа типа, изменяющегося (20) при попытке сохранить дату и время. Datetime генерируется datetime.datetime.now(), и я пробовал с django.utils.timezone.make_aware() и без него без каких-либо изменений.

Полный отслеживающий находится на https://gist.github.com/cyberjacob/2f1e61f83a6fbd5792b8

Любые предложения, почему моя дата случайно слишком долго?

+0

Либо поле даты было каким-то образом создано в качестве столбца varchar в базе данных, либо ошибка совсем о другом поле. –

+0

traceback показывает LastUpdate = datetime.datetime.now(), является нарушающей линией в моем коде – CyberJacob

+0

Это, очевидно, первая строка многострочного оператора и не является причиной ошибки; установка переменной в дату будет * not * привести к вставке базы данных. Покажите контекст этой строки: возможно, вся функция runDetailedReport, если она не слишком длинная. –

ответ

1

Проблема не связана с полем даты, а с полем строки ReportKey.

Как уже упоминалось, в Python не является идиоматическим вызовом методов двойного подчеркивания, например foo.__str__(). Вы должны вызвать встроенные функции: str(foo). Еще лучше, однако, использовать интерполяцию строк:

ReportKey = "DetailedReport.{}.{}.{}".format(year, month, clientId)