Django — Каков наилучший способ отфильтровать мягко удаляемые строки?

#django #database-design

#django #database-design

Вопрос:

Когда моя программа выполняет мягкое удаление, мягко удаляемые строки будут помечены как неактивные или удаленные (например, person.deleted=True ). Вопрос в том, каков наилучший способ убедиться, что при каждом извлечении данных из этой таблицы будут возвращаться только активные записи без необходимости добавлять deleted=False аргумент к filter методу (который не только повторяющийся, но и подверженный ошибкам).

Комментарии:

1. Выбор данных из VIEW вместо TABLE является одним из способов достижения этой цели. Не уверен, есть ли какой-либо другой способ. Однако вы не можете изменять данные в VIEW , поскольку их содержимое является всего лишь продуктом SQL-запроса, поэтому вашему коду придется включать SELECT запросы, которые извлекают данные из VIEW и UPDATE/INSERT запросы, которые изменяют данные в оригинале TABLE , что может несколько сбивать с толку.

Ответ №1:

Вы можете попробовать создать пользовательский диспетчер объектов для вашей модели. Этого может быть достаточно или нет, в зависимости от ваших требований и дальнейшей реализации проекта.

 class Person(models.Model):
    # ...
    objects = PersonManager()

class PersonManager(models.Manager):
    def all(self, *args, **kwargs):
        return super(PersonManager, self).filter(deleted=False)

    def deleted(self, *args, **kwargs):
        return super(PersonManager, self).filter(deleted=True)
    # ...
  

Обновление: Другой удобный способ сделать это — с помощью django-livefield