Например:
Код: Выделить всё
class Person(SQLModel, table=True):
age: int
@classmethod
def where_of_age(cls):
return cls.age >= 18
Код: Выделить всё
with session:
query = Person.select().where(Person.where_of_age())
result = session.exec(query)
Код: Выделить всё
class SoftDeletable(SQLModel):
deletedAt: DateTimeType | None = None
@classmethod
def deleted(cls):
return cls.deletedAt.is_not(None)
class Person(SQLModel, SoftDeletable, table=True):
...
Код: Выделить всё
aliasedPerson = aliased(Person, some_sub_query)
query = Person.select_from(Person).join(some_sub_query).where(aliasedPerson.deleted())
Причина, по-видимому, в том, что aliasedPerson не является подклассом Person, а скорее прокси-объектом, который ретранслирует вызовы метода
к Person класс (который ничего не знает о псевдонимы)
Конечно, я мог бы решить эту проблему, сделав метод delete() функцией, которая вместо этого получает прокси-объект в качестве параметра:
Код: Выделить всё
class SoftDeletable(SQLModel):
deletedAt: DateTimeType | None = None
def deleted(target):
return target.deletedAt.is_not(None)
aliasedPerson = aliased(Person, some_sub_query)
query = Person.select_from(Person).join(some_sub_query).where(deleted(aliasedPerson))
- при составлении нескольких предложенийwhere таким образом параметр должен передаваться, несмотря на быть неявным
- расширение/переопределение становится затруднительным
Подробнее здесь: https://stackoverflow.com/questions/792 ... lmodel-mod
Мобильная версия