peewee的替代选择方法

时间:2019-07-05 08:10:00

标签: python peewee

我想在peewee上实现软删除机制。

我尝试像保存方法一样在BaseModel上覆盖选择方法。

class BaseModel(Model):
    id = BigAutoField()
    created = DateTimeField(default=datetime.datetime.now)
    modified = DateTimeField()
    deleted = BooleanField(default=False)

    def select(self, *args, **kwargs):
        super(BaseModel, self).select(*args, **kwargs).where(BaseModel.deleted!=True)

    def save(self, *args, **kwargs):
        self.modified = datetime.datetime.now()
        super(BaseModel, self).save(*args, **kwargs)

    class Meta:
         database = db

当我尝试在基本模型上覆盖select方法时,会出现以下错误。

TypeError: select() missing 1 required positional argument: 'self'

还有其他方法可以实现软删除机制吗?我在这里想念什么?

1 个答案:

答案 0 :(得分:0)

不要这样做!

永远不要这样做!

相反,只需在模型类中添加新的类方法,然后使用它代替.select():

class BaseModel(Model):
    @classmethod
    def public(cls):
        return cls.select().where(cls.deleted != True)

Peewee在内部使用select(),此外,如果您选择覆盖.select(),则现在没有发布不包含此过滤器的查询的真正方法。