Django DateTimeField在未编辑时变为null

时间:2011-08-11 09:48:59

标签: django datetime model null

基本上我在我的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。试图在网上找到类似的问题,但没有运气:(。任何帮助赞赏。

2 个答案:

答案 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|Falseauto_now=True|False。 它们都会自动将字段设为editable=False。 每次更新字段时,使用auto_now=True设置当前日期时间。 使用auto_now_add=True仅在第一次保存对象时设置当前时间。