У меня есть таблица в PostgreSQL, содержащая информацию о документах. Скажем что-то вроде этого:
table: doc
id (int)
name (string)
type (int)
type – категория документа (например, 1 – паспорт, 2 – страховка и т. д.). Также у меня есть разные таблицы с дополнительной информацией для каждого типа документов.
table: info
id (int)
doc_id (fk)
info (additional columns)
Я хочу иметь модель SQLAlchemy для работы с каждым типом документа, связанного с его дополнительной информацией, и иметь возможность управлять отображаемыми столбцами (для Flask-Admin, если это важно).
Теперь, чтобы объединить две таблицы в какую-то «модель», я использовал Сопоставление столбцов таблицы из документации SQLAlchemy (когда был только один тип документов):
class DocMapping(db.Model):
__table__ = doc.__table__.join(info)
__mapper_args__ = {
'primary_key': [doc.__table__.c.id]
}
Теперь возникает вопрос: как создать несколько классов, унаследованных от db.Model (DocPassportMapping, DocInsuranceMapping и т. д.) на основе столбца doc.type?
Что-то такое:
__table__ = doc.__table__.join(info).filter(doc.type)
Очевидно, это не работает, потому что здесь нет объекта query.