【发布时间】:2018-08-28 08:37:16
【问题描述】:
我有一个模型,当一个对象被删除时,我想要一个模型,而不是被删除,而是更新状态。这是通过以下代码实现的:
def delete(self, using=None, keep_parents=False):
self.status = Booking.DELETED
self.save()
管理器已更新,因此在应用程序的其余部分中,我永远不会收到已删除的预订。
class BookingManager(models.Manager):
def get_queryset(self):
return super().get_queryset().exclude(status=Booking.DELETED)
class BookingDeletedManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(status=Booking.DELETED)
class Booking(models.Model):
PAYED = 0
PENDING = 1
OPEN = 2
CANCELLED = 3
DELETED = 4
objects = BookingManager()
deleted_objects = BookingDeletedManager()
...
现在我已经阅读了 django 信号,想知道在这里使用预删除信号是否更好。可以更改代码,以便在预删除接收器中创建一个状态为“已删除”的副本,而原始预订被删除。
在documentation 中声明这些信号应该用于当框架中的其他地方发生操作时,允许解耦的应用程序得到通知。似乎信号是一个很好的解决方案,但文档中的这种细微差别让我认为这可能不是我想要的,而覆盖可能只是要走的路。
这里并非如此,因为我一直都想要这个功能。 所以我的问题是有充分的理由为什么我不应该覆盖删除方法并使用预删除信号,反之亦然?
【问题讨论】:
标签: python django django-models orm