diff --git a/sqladmin/forms.py b/sqladmin/forms.py index 00daa7d1..f59d33ee 100644 --- a/sqladmin/forms.py +++ b/sqladmin/forms.py @@ -1,6 +1,7 @@ """ The converters are from Flask-Admin project. """ + from __future__ import annotations import enum @@ -23,6 +24,7 @@ RelationshipProperty, sessionmaker, ) +from sqlalchemy.sql import Select from sqlalchemy.sql.elements import Label from sqlalchemy.sql.schema import Column from wtforms import ( @@ -109,6 +111,11 @@ def _inner(func: T_CC) -> T_CC: class ModelConverterBase: + relationships_statements: dict[str, Select] = {} + """ + Select statement for relationships. + """ + _converters: dict[str, ConverterCallable] = {} def __init__(self) -> None: @@ -229,7 +236,10 @@ async def _prepare_select_options( session_maker: sessionmaker, ) -> list[tuple[str, Any]]: target_model = prop.mapper.class_ - stmt = select(target_model) + if prop.key in self.relationships_statements: + stmt = self.relationships_statements[prop.key] + else: + stmt = select(target_model) if is_async_session_maker(session_maker): async with session_maker() as session: