85
什么是自动为对象设置创建日期的最佳方式,以及当对象上次更新时将记录的字段?django模型表单对象的自动创建日期?
在我的模型,我有:
created_at = models.DateTimeField(False, True, editable=False)
updated_at = models.DateTimeField(True, True, editable=False)
在我看来:
if request.method == 'POST':
form = MyForm(request.POST)
if form.is_valid():
obj = form.save(commit=False)
obj.user = request.user
obj.save()
return HttpResponseRedirect('obj_list')
我得到的错误:
objects_object.created_at may not be NULL
我必须手动设置这个值,我自己?我认为这是传递给DateTimeFields的参数的要点(或者它们只是默认值,并且因为我设置了'editable = False',它们不会显示在窗体上,因此不会在请求中提交,因此不要放在表格中?)。
什么是这样做的最佳方式? init方法?
感谢
ps的 - 我是一个Django和Python新手...
'auto_now'和'auto_now_add'被认为是邪恶的,所以尽量避免它们。 [这个答案](http://stackoverflow.com/a/1737078/1226722)解释了为什么,并提供了一个更好的方法,覆盖'save()'方法。 – gregoltsov 2014-01-30 13:15:44
它产生了这个错误: '你试图添加一个不可空的字段'created_at'给游戏用户没有默认值;我们不能这样做(数据库需要一些东西来填充现有的行)。 请选择修复: 1)现在提供一次性的默认(将在现有的所有行设置) 2)退出,并让我加入models.py默认 选择一个选项:1 请进入默认值,作为有效的Python datetime和django.utils.timezone模块可用,所以你可以做eg timezone.now() >>> timezone.now()' – 2016-06-21 10:56:32
删除数据库上的行,或者检查选项1并添加timezone.now() – mullerivan 2017-03-10 04:39:35