#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