代码之家  ›  专栏  ›  技术社区  ›  Jonas Vandermosten

重写delete()与使用pre-delete信号

  •  1
  • Jonas Vandermosten  · 技术社区  · 8 年前

    我有一个模型,我想当一个对象被删除,而不是被删除一个状态更新。这是通过以下代码实现的:

    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()
    ...  
    

    在 documentation 它指出这些信号应该用来 允许分离的应用程序在框架的其他地方发生操作时得到通知 . 似乎这个信号是一个很好的解决方案,但文档中的细微差别让我觉得它可能不是我想要的,重写可能只是一种方式。

    这不是真正的情况,因为我只是想在这里的功能所有的时间。 所以,我的问题是,有没有一个坚实的理由,为什么我不应该重写delete方法,使用pre-delete信号,反之亦然?

    1 回复  |  直到 8 年前
        1
  •  2
  •   bruno desthuilliers    8 年前

    在文档中,它指出应该使用这些信号来允许解耦的应用程序在框架的其他地方发生操作时得到通知。

    他对第一个一无所知 -因此避免了将第二个应用程序与第一个应用程序耦合的需要。

    an anti-pattern :它只会增加开销,并使代码的可读性降低,这完全没有什么好的理由,而非常明显的解决方案是只做你已经做过的事情。