我的模型中有字段如下。
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添加自动生成的日期时间字段?
答案 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无法使用当前日期时间
创建对象
因为你没有告诉它。