我想在保存新记录(而不是更新现有记录)时,在Django模型对象的save()方法中触发一个特殊操作。

是检查(self。id != None)有必要且充分地保证自我记录是新的且没有被更新?有没有可能被忽略的特殊情况?


当前回答

自我检查。Id假设Id是模型的主键。更通用的方法是使用pk快捷方式。

Is_new = self。pk为None

其他回答

这是常见的做法。

id将在第一次保存到db时给出

自我检查。Id假设Id是模型的主键。更通用的方法是使用pk快捷方式。

Is_new = self。pk为None

在python 3和django 3中,这是在我的项目中工作的:

def save_model(self, request, obj, form, change):
   if not change:
      #put your code here when adding a new object.

用pk代替id:

if not self.pk:
  do_something()
> def save_model(self, request, obj, form, change):
>         if form.instance._state.adding:
>             form.instance.author = request.user
>             super().save_model(request, obj, form, change)
>         else:
>             obj.updated_by = request.user.username
> 
>             super().save_model(request, obj, form, change)