Моя модель настроена таким образом, что она никогда не удаляется, вместо этого статус обновляется до статуса «УДАЛЕНО». Чтобы добиться этого, я переопределил метод delete () следующим образом
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()
...
Теперь, когда у меня есть объект бронирования, и удалите его вот так
booking.delete()
И обновите это так
booking.refresh_from_db()
Я получаю ошибку
.models.DoesNotExist: Booking matching query does not exist
Если я использую правильный менеджер
Booking.deleted_objects.get(pk=booking.id)
Я правильно представил бронирование, я предполагаю, что метод refresh_from_db использовал менеджер стандартных объектов, который не находит правильное бронирование. Есть ли способ обойти это или я подхожу к этой проблеме неправильно?