【发布时间】:2018-10-07 14:50:04
【问题描述】:
在我们的项目中,我们使用软删除(模型上的 is_deleted 属性)。 在创建新模型之前,我想首先检查它是否已经存在并被删除,如果是 - 设置 is_deleted=False 并保存已经存在的模型。 所以我决定重写模型的“保存”方法。 (不是 View Create,因为它不仅适用于请求) 问题是所有操作(创建、更新、删除)都调用了“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)
【问题讨论】:
-
您想在重新插入之前“删除”记录吗?为什么?
-
所以实际上你在你的数据库中没有删除任何东西!您处理所有具有
is_deleted=False的对象。当有人删除某些内容时,您只需将is_deleted设置为 True。对吗? -
@Lemayzeur - 是的。
-
在创建新模型之前,我想先检查它是否已经存在。为此,您需要一个字段作为比较来测试对象是否已经存在,例如:您可以检查
title