使用DateTimeField的Django IntegrityError

时间:2016-11-03 17:19:23

标签: python django postgresql datetime

我的模型中有字段如下。

    view_time = ArrayField(
    models.DateTimeField(auto_now_add=True))

但我收到错误:

django.db.utils.IntegrityError: null value in column "view_time"violates not-null constraint
DETAIL:  Failing row contains (18, 0, null, null, null).
当我尝试创建新对象并添加值时出现

错误:

    recent_views = UserRecentViews.objects.create()
    recent_views.add_view(product.article)

我使用django 1.8.8和Python 3.5.2

我重置数据库fiew次,但它没有帮助,db是Postgres。

我认为对象创建存在问题?但为什么django无法使用当前日期时间创建对象?为此添加了auto_now_add = True。

我的问题是如何使用django添加自动生成的日期时间字段?

1 个答案:

答案 0 :(得分:1)

首先,您的数据库似乎未完全规范化。在列或数组类型中使用逗号分隔值通常是一个很好的指示。

其次

  

提示:数组不是集合;搜索特定的数组元素即可   数据库错误设计的标志。考虑使用单独的表格   每个项目的行都是一个数组元素。这会更容易   搜索,并可能为大量的更好地扩展   元件。

Arrays只是postgresql为你提供足够绳索的方式......

您最好的选择是规范您的数据库。你的劣等选项是设置blank = True,null = True

view_time = ArrayField(
    models.DateTimeField(auto_now_add=True), blank=True, null=True)

那是因为当你执行以下操作时,django根本没有理由创建任何DateTimeField对象。

recent_views = UserRecentViews.objects.create()

所以它只是将数组字段设置为null,这是不允许的。

哦更具体一点

  

但为什么django无法使用当前日期时间

创建对象

因为你没有告诉它。