Переопределить метод выбора на peewee - PullRequest
0 голосов
/ 05 июля 2019

Я хочу реализовать механизм мягкого удаления на 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

Когда я пытаюсь переопределить метод выбора в моей базовой модели, он выдает следующую ошибку.

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

Есть ли другой способ реализовать механизм мягкого удаления? Что мне здесь не хватает?

1 Ответ

0 голосов
/ 05 июля 2019

Не делай этого!

Никогда не делай этого!

Вместо этого просто добавьте новый метод класса в класс вашей модели и используйте его вместо .select ():

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

Peewee использует select() для внутреннего использования, и плюс, если вы решите переопределить .select(), у вас нет реального способа выдачи запроса, который не включает этот фильтр.

...