| 246 | self.foreign_key = foreign_key |
| 247 | |
| 248 | async def run( |
| 249 | self, |
| 250 | node: Optional[str] = None, |
| 251 | in_pool: bool = True, |
| 252 | ) -> Optional[ReferencedTable]: |
| 253 | if not self.row._exists_in_db: |
| 254 | raise ValueError("The object doesn't exist in the database.") |
| 255 | |
| 256 | root_table = self.row.__class__ |
| 257 | |
| 258 | data = ( |
| 259 | await root_table.select( |
| 260 | *[ |
| 261 | i.as_alias(i._meta.name) |
| 262 | for i in self.foreign_key.all_columns() |
| 263 | ] |
| 264 | ) |
| 265 | .where( |
| 266 | root_table._meta.primary_key |
| 267 | == getattr(self.row, root_table._meta.primary_key._meta.name) |
| 268 | ) |
| 269 | .first() |
| 270 | .run(node=node, in_pool=in_pool) |
| 271 | ) |
| 272 | |
| 273 | # Make sure that some values were returned: |
| 274 | if data is None or not any(data.values()): |
| 275 | return None |
| 276 | |
| 277 | references = cast( |
| 278 | type[ReferencedTable], |
| 279 | self.foreign_key._foreign_key_meta.resolved_references, |
| 280 | ) |
| 281 | |
| 282 | referenced_object = references(**data) |
| 283 | referenced_object._exists_in_db = True |
| 284 | return referenced_object |
| 285 | |
| 286 | def __await__( |
| 287 | self, |