I have a Abstract Model SoftDelete like follow.
class SoftDeleteManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(is_deleted=False)
class SoftDeleteModel(models.Model):
is_deleted = models.BooleanField(default=0)
deleted_at = models.DateTimeField(null=True)
objects = SoftDeleteManager()
def delete(self):
self.is_deleted = True
self.deleted_at = timezone.now()
self.save()
class Meta:
abstract = True
class Employee(SafeDeleteModel):
pass
Whenever model gets deleted i set is_deleted
to True
and updating the timestamp deleted_at
, and created the custom manager to override initial queryset which return only non deleted fields(is_deleted=False).
employee = Employee.objects.get(pk=1)
employee.delete()
employee.refresh_from_db() // not raising DoesNotExist
But lets say i have a Employee
model which uses the SafeDeleteModel
for soft delete, after deleting the model like Employee.objects.get(pk=1).delete()
when i call employee.refresh_from_db()
,its not raising DoesNotExist
, but updates the value of is_deleted, deleted_at as expected, what mistake i made here, why its not raising DoesNotExist
?