覆盖 peewee 上的 select 方法
Override select method on peewee
我想在peewee上实现软删除机制。
我尝试在我的 BaseModel 上覆盖 select 方法,例如保存方法。
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'
有没有其他方法可以实现软删除机制?我在这里错过了什么?
不要这样做!
永远不要这样做!
相反,只需向您的模型 class 添加一个新的 class 方法并使用它来代替 .select():
class BaseModel(Model):
@classmethod
def public(cls):
return cls.select().where(cls.deleted != True)
Peewee 在内部使用 select()
,此外,如果您选择覆盖 .select()
,您现在没有真正的方法来发出不包含此过滤器的查询。
我想在peewee上实现软删除机制。
我尝试在我的 BaseModel 上覆盖 select 方法,例如保存方法。
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'
有没有其他方法可以实现软删除机制?我在这里错过了什么?
不要这样做!
永远不要这样做!
相反,只需向您的模型 class 添加一个新的 class 方法并使用它来代替 .select():
class BaseModel(Model):
@classmethod
def public(cls):
return cls.select().where(cls.deleted != True)
Peewee 在内部使用 select()
,此外,如果您选择覆盖 .select()
,您现在没有真正的方法来发出不包含此过滤器的查询。