基本上我在我的ModelForm上有这个代码:
def save(self):
if not self.instance.pk:
self.instance.author = self.author
self.instance.date_sorted = datetime.now()
return super(PostForm, self).save(commit = True)
我的目的是仅在添加记录时保存date_sorted,并在编辑时忽略它。我的date_sorted字段定义为:
date_sorted = models.DateTimeField(blank = True, null = True)
我定义了blank = True和null = True因为在某些时候我想要一些date_sorted为null(故意)。
添加时,date_sorted将存储当前日期和时间,但在编辑(更新其他字段)时,date_sorted将更改为NULL。试图在网上找到类似的问题,但没有运气:(。任何帮助赞赏。
答案 0 :(得分:3)
试试这个,它会隐藏表单中的日期时间字段,并在发布消息时自动设置日期:
date_sorted = models.DateTimeField(auto_now=True)
另外,您可以使用save_model方法:
def save_model(self, request, obj, form, change):
super(MessageAdmin, self).save_model(request, obj, form, change)
我将它用于管理面板,并且不知道它在其他实现中是如何工作的,但是试着看看它。您可以在保存对象之前和之后键入代码,这样您就可以修改obj.date_sorted然后保存模型。
答案 1 :(得分:0)
models.DateTimeField
有两个属性:auto_now_add=True|False
和auto_now=True|False
。
它们都会自动将字段设为editable=False
。
每次更新字段时,使用auto_now=True
设置当前日期时间。
使用auto_now_add=True
仅在第一次保存对象时设置当前时间。