@@ -176,6 +176,22 @@ async def handle_row_action(
176
176
except SQLAlchemyError as exc :
177
177
raise ActionFailed (str (exc )) from exc
178
178
179
+ def get_details_query (self , request : Request ) -> Select :
180
+ """
181
+ Return a Select expression which is used as base statement for
182
+ [find_by_pk][starlette_admin.views.BaseModelView.find_by_pk] and
183
+ [find_by_pks][starlette_admin.views.BaseModelView.find_by_pks] methods.
184
+
185
+ Examples:
186
+ ```python hl_lines="3-4"
187
+ class PostView(ModelView):
188
+
189
+ def get_details_query(self, request: Request):
190
+ return super().get_details_query().options(selectinload(Post.author))
191
+ ```
192
+ """
193
+ return select (self .model )
194
+
179
195
def get_list_query (self , request : Request ) -> Select :
180
196
"""
181
197
Return a Select expression which is used as base statement for
@@ -324,7 +340,7 @@ async def find_by_pk(self, request: Request, pk: Any) -> Any:
324
340
else :
325
341
assert isinstance (self ._pk_coerce , type )
326
342
clause = self ._pk_column == self ._pk_coerce (pk )
327
- stmt = select ( self .model ).where (clause )
343
+ stmt = self .get_details_query ( request ).where (clause )
328
344
for field in self .get_fields_list (request , request .state .action ):
329
345
if isinstance (field , RelationField ):
330
346
stmt = stmt .options (joinedload (getattr (self .model , field .name )))
@@ -360,7 +376,7 @@ async def _exec_find_by_pks(
360
376
clause = await self ._get_multiple_pks_in_clause (pks , use_composite_in )
361
377
else :
362
378
clause = self ._pk_column .in_ (map (self ._pk_coerce , pks )) # type: ignore
363
- stmt = select ( self .model ).where (clause )
379
+ stmt = self .get_details_query ( request ).where (clause )
364
380
for field in self .get_fields_list (request , request .state .action ):
365
381
if isinstance (field , RelationField ):
366
382
stmt = stmt .options (joinedload (getattr (self .model , field .name )))
0 commit comments