【发布时间】:2014-10-31 12:29:14
【问题描述】:
我有一个将报告存储在 SQL 表中的 Django 模型 (ReportCache)。其中一个字段是 django.db.models.DateTimeField,用于存储上次更新报告的时间。
由于某种原因,我在尝试向它们保存日期时间时收到 DataError: value too long for type character varying(20)。 datetime是由datetime.datetime.now()生成的,我试过有无django.utils.timezone.make_aware(),都没有影响。
完整的回溯位于https://gist.github.com/cyberjacob/2f1e61f83a6fbd5792b8
关于我的日期随机太长的任何建议?
【问题讨论】:
-
要么日期字段以某种方式创建为数据库中的 varchar 列,要么错误完全与另一个字段有关。
-
回溯显示 LastUpdate=datetime.datetime.now(),是我代码中的违规行
-
这显然是多行语句的第一行,并不是错误的原因;将变量设置为日期将不会导致数据库插入。请显示该行的上下文:可能是整个 runDetailedReport 函数,如果它不是太长的话。
-
所以我猜问题出在 ReportKey 字段上,因为它至少有 22 个字符(取决于 clientId 的长度。另请注意,您应该从不调用
foo.__str__()直接:做str(foo)甚至更好地使用字符串插值。 -
将 ReportKey 的长度更改为 64 已解决此问题。您能否将其作为答案提交,以便我接受。另外,为什么我应该使用 str() 而不是 __str__()?
标签: python django datetime django-models traceback