0
当我的程序执行软删除时,软删除的行将被标记为无效或删除(例如person.deleted=True
)。问题是,确保每次从该表中检索数据只会返回活动的记录而不必将deleted=False
参数添加到filter
方法的最佳方法是什么(它不仅是重复性的,而且还倾向于错误)。Django - 过滤掉被轻度删除的行的最佳方法是什么?
当我的程序执行软删除时,软删除的行将被标记为无效或删除(例如person.deleted=True
)。问题是,确保每次从该表中检索数据只会返回活动的记录而不必将deleted=False
参数添加到filter
方法的最佳方法是什么(它不仅是重复性的,而且还倾向于错误)。Django - 过滤掉被轻度删除的行的最佳方法是什么?
您可以尝试为您的模型创建自定义对象管理器。取决于您的要求和进一步的项目实施,这可能已经足够或者没有。
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
选择数据从'VIEW'而不是'TABLE'是实现这一目标的方法之一。不知道是否有其他方式。然而,你不能修改'VIEW'上的数据,因为它的内容只是SQL查询的产物,所以你的代码必须包含'SELECT'查询,从'VIEW'和'UPDATE/INSERT'查询修改原始“TABLE”中的数据,这可能有点令人困惑。 – Havenard