Использование другого менеджера с refresh_from_db () - PullRequest
0 голосов
/ 27 августа 2018

Моя модель настроена таким образом, что она никогда не удаляется, вместо этого статус обновляется до статуса «УДАЛЕНО». Чтобы добиться этого, я переопределил метод 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 использовал менеджер стандартных объектов, который не находит правильное бронирование. Есть ли способ обойти это или я подхожу к этой проблеме неправильно?

1 Ответ

0 голосов
/ 27 августа 2018

refresh_from_db - это просто метод внутри класса models.Model, поэтому вы можете переопределить его внутри модели Booking. Смотрите здесь для источника: https://docs.djangoproject.com/en/2.1/_modules/django/db/models/base/#Model.refresh_from_db

Вам просто нужно изменить db_instance_qs, чтобы использовать BookingDeletedManager()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...