【问题标题】:Override select method on peewee覆盖peewee上的选择方法
【发布时间】:2019-07-05 22:15:46
【问题描述】:

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

我尝试在我的 BaseModel 上覆盖 select 方法,例如 save 方法。

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'

还有没有其他方法可以实现软删除机制?我在这里错过了什么?

【问题讨论】:

    标签: python peewee


    【解决方案1】:

    不要这样做!

    永远不要这样做!

    只需向模型类添加一个新的类方法并使用它来代替 .select():

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

    Peewee 在内部使用select(),此外,如果您选择覆盖.select(),您现在无法发出不包含此过滤器的查询。

    【讨论】:

      猜你喜欢
      • 2017-06-05
      • 1970-01-01
      • 2013-07-14
      • 2016-11-11
      • 1970-01-01
      • 2012-02-13
      • 1970-01-01
      • 2012-11-15
      • 1970-01-01
      相关资源
      最近更新 更多