2016-10-22 51 views
0

当我的程序执行软删除时,软删除的行将被标记为无效或删除(例如person.deleted=True)。问题是,确保每次从该表中检索数据只会返回活动的记录而不必将deleted=False参数添加到filter方法的最佳方法是什么(它不仅是重复性的,而且还倾向于错误)。Django - 过滤掉被轻度删除的行的最佳方法是什么?

+2

选择数据从'VIEW'而不是'TABLE'是实现这一目标的方法之一。不知道是否有其他方式。然而,你不能修改'VIEW'上的数据,因为它的内容只是SQL查询的产物,所以你的代码必须包含'SELECT'查询,从'VIEW'和'UPDATE/INSERT'查询修改原始“TABLE”中的数据,这可能有点令人困惑。 – Havenard

回答

2

您可以尝试为您的模型创建自定义对象管理器。取决于您的要求和进一步的项目实施,这可能已经足够或者没有。

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

相关问题