SQLAlchemy 中模型的默认过滤器

Default filter for Model in SQLAlchemy

假设我有以下 table 称为 my_table

id type
1 a
2 b
3 b
4 a

我想要两个依赖相同 table 的模型,但是当我查询每个模型时,它们将 return 仅在 type 列上使用默认过滤器得到结果。 例如 -

def filter_by_a():
    ...

def filter_by_b():
    ...

class ModelA(db.Model):
    __tablename__ = 'my_table'

    default_filter = filter_by_a

    id = db.Column(db.Integer, primary_key=True)
    type = db.Column(db.String)

class ModelB(db.Model):
    __tablename__ = 'my_table'

    default_filter = filter_by_b

    id = db.Column(db.Integer, primary_key=True)
    type = db.Column(db.String)

当我使用 db.session.query(ModelA) 时,结果是

id type
1 a
4 a

当我使用 db.session.query(ModelB) 时,结果是

id type
2 b
3 b

有办法吗?

https://docs.sqlalchemy.org/en/14/orm/inheritance.html#single-table-inheritance

class MyTableModel(db.Model):
    __tablename__ = 'my_table'
    id = db.Column(db.Integer, primary_key=True)
    type = db.Column(db.String)

    __mapper_args__ = {
        'polymorphic_on': type
    }

class ModelA(MyTableModel):
    __mapper_args__ = {
        'polymorphic_identity': 'a'
    }

class ModelB(MyTableModel):
    __mapper_args__ = {
        'polymorphic_identity': 'b'
    }