我想在保存新记录(而不是更新现有记录)时,在Django模型对象的save()方法中触发一个特殊操作。
是检查(self。id != None)有必要且充分地保证自我记录是新的且没有被更新?有没有可能被忽略的特殊情况?
我想在保存新记录(而不是更新现有记录)时,在Django模型对象的save()方法中触发一个特殊操作。
是检查(self。id != None)有必要且充分地保证自我记录是新的且没有被更新?有没有可能被忽略的特殊情况?
当前回答
这是否适用于上述所有场景?
if self.pk is not None and <ModelName>.objects.filter(pk=self.pk).exists():
...
其他回答
在python 3和django 3中,这是在我的项目中工作的:
def save_model(self, request, obj, form, change):
if not change:
#put your code here when adding a new object.
检查self。Id和force_insert标志。
if not self.pk or kwargs.get('force_insert', False):
self.created = True
# call save method.
super(self.__class__, self).save(*args, **kwargs)
#Do all your post save actions in the if block.
if getattr(self, 'created', False):
# So something
# Do something else
这很方便,因为您新创建的对象(self)具有它的pk值
这是否适用于上述所有场景?
if self.pk is not None and <ModelName>.objects.filter(pk=self.pk).exists():
...
自我检查。Id假设Id是模型的主键。更通用的方法是使用pk快捷方式。
Is_new = self。pk为None
检查自我的另一种方法。我们可以检查self。模型的状态
self._state。添加才是真正的创造
self._state。添加是错误的更新
我是从这一页上得到的