@@ -462,12 +462,9 @@ async def test_sqlalchemy_orm_get_list_supports_additional_search_and_prefetch(e
462462 return
463463
464464 admin_model = get_admin_model (event .__class__ )
465- admin_model .search_fields = ["name" ]
466- objs , total = await admin_model .orm_get_list (
467- search = "Test Tournament" ,
468- prefetch_related_fields = ["tournament" ],
469- additional_search_fields = ["tournament__name" ],
470- )
465+ admin_model .search_fields = ["name" , "tournament__name" ]
466+ admin_model .list_select_related = ("tournament" ,)
467+ objs , total = await admin_model .orm_get_list (search = "Test Tournament" )
471468
472469 assert isinstance (total , int )
473470 assert total > 0
@@ -480,14 +477,8 @@ async def test_sqlalchemy_orm_get_list_prefetch_edge_cases(event, session_with_t
480477 return
481478
482479 admin_model = get_admin_model (event .__class__ )
483- objs , total = await admin_model .orm_get_list (
484- prefetch_related_fields = [
485- "does_not_exist" ,
486- "tournament__does_not_exist" ,
487- "tournament__events" ,
488- "tournament__name" ,
489- ]
490- )
480+ admin_model .search_fields = ["name" ]
481+ objs , total = await admin_model .orm_get_list (search = "event" )
491482 assert isinstance (total , int )
492483 assert isinstance (objs , list )
493484
@@ -503,13 +494,27 @@ async def test_sqlalchemy_orm_get_list_prefetch_no_related_model(event, session_
503494 original_getattrs = sqlalchemy_orm .getattrs
504495
505496 def fake_getattrs (obj , attr_path , default = None ):
506- if attr_path == "property. mapper.class_" :
497+ if attr_path == "mapper.class_" :
507498 return None
508499 return original_getattrs (obj , attr_path , default = default )
509500
510501 monkeypatch .setattr (sqlalchemy_orm , "getattrs" , fake_getattrs )
511502
512- objs , total = await admin_model .orm_get_list (prefetch_related_fields = ["tournament__events" ])
503+ admin_model .search_fields = ["tournament__name" ]
504+ objs , total = await admin_model .orm_get_list (search = "anything" )
505+ assert total == 0
506+ assert objs == []
507+
508+
509+ async def test_sqlalchemy_orm_get_list_search_uses_select_related (event , session_with_type ):
510+ _ , session_type = session_with_type
511+ if session_type != "sqlalchemy" :
512+ return
513+
514+ admin_model = get_admin_model (event .__class__ )
515+ admin_model .search_fields = ["name" ]
516+ admin_model .list_select_related = ("tournament" ,)
517+ objs , total = await admin_model .orm_get_list (search = "event" )
513518 assert isinstance (total , int )
514519 assert isinstance (objs , list )
515520
@@ -812,12 +817,9 @@ async def test_ponyorm_orm_get_list_supports_additional_search_and_prefetch(even
812817 return
813818
814819 admin_model = get_admin_model (event .__class__ )
815- admin_model .search_fields = ["name" ]
816- objs , total = await admin_model .orm_get_list (
817- search = "Test Tournament" ,
818- prefetch_related_fields = ["tournament" ],
819- additional_search_fields = ["tournament__name" ],
820- )
820+ admin_model .search_fields = ["name" , "tournament__name" ]
821+ admin_model .list_select_related = ("tournament" ,)
822+ objs , total = await admin_model .orm_get_list (search = "Test Tournament" )
821823
822824 assert isinstance (total , int )
823825 assert total > 0
@@ -1048,12 +1050,9 @@ async def test_tortoise_orm_get_list_supports_additional_search_and_prefetch(eve
10481050 from fastadmin .models .orms .tortoise import TortoiseModelAdmin
10491051
10501052 admin_model = TortoiseModelAdmin (event .__class__ )
1051- admin_model .search_fields = ["name" ]
1052- objs , total = await admin_model .orm_get_list (
1053- search = "Test Tournament" ,
1054- prefetch_related_fields = ["tournament" ],
1055- additional_search_fields = ["tournament__name" ],
1056- )
1053+ admin_model .search_fields = ["name" , "tournament__name" ]
1054+ admin_model .list_select_related = ("tournament" ,)
1055+ objs , total = await admin_model .orm_get_list (search = "Test Tournament" )
10571056
10581057 assert isinstance (total , int )
10591058 assert total > 0
@@ -1066,12 +1065,9 @@ async def test_django_orm_get_list_supports_additional_search_and_prefetch(event
10661065 return
10671066
10681067 admin_model = get_admin_model (event .__class__ )
1069- admin_model .search_fields = ["name" ]
1070- objs , total = await admin_model .orm_get_list (
1071- search = "Test Tournament" ,
1072- prefetch_related_fields = ["tournament" ],
1073- additional_search_fields = ["tournament__name" ],
1074- )
1068+ admin_model .search_fields = ["name" , "tournament__name" ]
1069+ admin_model .list_select_related = ("tournament" ,)
1070+ objs , total = await admin_model .orm_get_list (search = "Test Tournament" )
10751071
10761072 assert isinstance (total , int )
10771073 assert total > 0
0 commit comments