简体   繁体   English

peewee的替代选择方法

[英]Override select method on peewee

I want to implement soft delete mechanism on peewee. 我想在peewee上实现软删除机制。

I tried overriding select method on my BaseModel like save method. 我试过像保存方法一样在我的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

When I try to override select method on my base model it gives following error. 当我尝试在基本模型上覆盖select方法时,出现以下错误。

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

Is there any other way to implement soft delete mechanism? 还有其他方法可以实现软删除机制吗? What am I missing here? 我在这里想念什么?

Don't do this! 不要这样!

Don't ever do this! 永远不要这样做!

Instead just add a new classmethod to your model class and use that instead of .select(): 相反,只需将新的类方法添加到模型类中,然后使用它代替.select():

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

Peewee uses select() internally, and plus, if you choose to override .select() you now have no real way of issuing a query that does not include this filter. Peewee在内部使用select() ,此外,如果您选择覆盖.select()那么您现在没有发出不包含此过滤器的查询的真正方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM