У меня есть абстрактная модель SoftDelete, как показано ниже.
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
При удалении модели я устанавливаю is_deleted
на True
и обновляю отметку времени deleted_at
, а также создаю собственный менеджер для переопределения начальногонабор запросов, который возвращает только не удаленные поля (is_deleted = False).
employee = Employee.objects.get(pk=1)
employee.delete()
employee.refresh_from_db() // not raising DoesNotExist
Но допустим, у меня есть модель Employee
, которая использует SafeDeleteModel
для мягкого удаления, после удаления модели, такой как Employee.objects.get(pk=1).delete()
когда я вызываю employee.refresh_from_db()
, это не вызывает DoesNotExist
, но обновляет значение is_deleted, dele_at, как и ожидалось, какую ошибку я здесь сделал, почему она не вызывает DoesNotExist
?