在我们的项目中,我们使用软删除(模型上的 is_deleted 属性)。 在创建新模型之前,我想首先检查它是否已经存在并被删除,如果是 - 设置 is_deleted=False 并保存已经存在的模型。 所以我决定重写模型的“保存”方法。 (不是 View 创建,因为它不仅适用于请求) 问题是所有操作(创建、更新、删除)都会调用“save()”。 有没有一种方法可以仅在创建时调用覆盖的方法?
class Model(BaseModel):
title = models.CharField(max_length=200)
identifier = models.CharField(max_length=15)
def save(self, *args, **kwargs):
try:
existing_model = Model.objects.active_and_deleted().get( identifier=self.identifier)
if self.is_deleted is False:
existing_model.is_deleted = False
existing_model.title = self.title
existing_model.created_at = self.created_at
existing_model.updated_at = self.updated_at
existing_model.created_by = self.created_by
existing_model.deleted_at = None
super(Model, existing_model).save(args, kwargs)
except Model.DoesNotExist:
# in case the Nodel wasn't already exist - continue
pass
super(Model, self).save(*args, **kwargs)
请您参考如下方法:
您问题的答案“有没有一种方法可以只在创建时调用重写的方法?”这是:
def save(self, *args, **kwargs):
if not self.id:
# Object is a new instance
return super(Model, self).save(*args, **kwargs)
但是这里还有其他问题。例如,您的模型不应命名为“模型”。
