File tree Expand file tree Collapse file tree 2 files changed +28
-0
lines changed Expand file tree Collapse file tree 2 files changed +28
-0
lines changed Original file line number Diff line number Diff line change @@ -160,6 +160,13 @@ def none_as_none(self, enabled=True):
160
160
return self
161
161
162
162
163
+ class SubqueryLoader (ModelLoader ):
164
+ def __init__ (self , model , subquery , ** extras ):
165
+ super ().__init__ (model , ** extras )
166
+ self .columns = [subquery .corresponding_column (column ) for column
167
+ in model ]
168
+
169
+
163
170
class AliasLoader (ModelLoader ):
164
171
def __init__ (self , alias , * columns , ** extras ):
165
172
super ().__init__ (alias , * columns , ** extras )
Original file line number Diff line number Diff line change @@ -161,6 +161,27 @@ async def test_alias_loader_columns(user):
161
161
assert u .id is not None
162
162
163
163
164
+ async def test_adjanency_list_on_nested_load (user ):
165
+ subquery = db .select (User ).alias ()
166
+ base_query = subquery .outerjoin (Team ).select ()
167
+
168
+ query = base_query .execution_options (loader = (User .load ('id' )))
169
+ u = await query .gino .first ()
170
+ # Because here arrives team_id, not user_id, and replaces it
171
+ assert u .id is None
172
+
173
+ from gino .loader import SubqueryLoader
174
+ query = base_query .execution_options (loader = SubqueryLoader (User , subquery , team = Team ))
175
+ u = await query .gino .first ()
176
+ assert u .id == user .id
177
+ assert u .realname == user .realname
178
+ assert u .nickname == user .nickname
179
+
180
+ assert isinstance (u .team , Team )
181
+ assert u .team .id == user .team .id
182
+ assert u .team .name == user .team .name
183
+
184
+
164
185
async def test_adjacency_list_query_builder (user ):
165
186
group = Team .alias ()
166
187
u = await User .load (team = Team .load (parent = group .on (
You can’t perform that action at this time.
0 commit comments