У меня есть модель, в которой я хотел бы, чтобы объект удалялся, а не удалялся, статус обновляется. Это было достигнуто с помощью следующего кода:
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 и мне было интересно, лучше ли использовать здесь сигнал предварительного удаления. Код можно изменить, чтобы в получателе предварительного удаления была создана копия со статусом «удален», а исходное бронирование было просто удалено.
В документации говорится, что эти сигналы следует использовать для , позволяющего отделенным приложениям получать уведомления, когда действия происходят в другом месте в рамках . Кажется, сигнал - хорошее решение, но этот нюанс в документации заставляет меня думать, что это, возможно, не то, что я хочу, и переопределение может быть просто подходом.
Это не совсем так, потому что я просто хочу эту функциональность все время. Так что мой вопрос в том, есть ли веская причина, почему я не должен отменять метод удаления и использовать сигнал предварительного удаления или наоборот?