|
22 | 22 | from pydantic import BaseModel |
23 | 23 | from pydantic.fields import FieldInfo |
24 | 24 | from sqlalchemy import inspect |
| 25 | +from sqlalchemy.orm import Mapper |
25 | 26 | from typing_extensions import Annotated, get_args, get_origin |
26 | 27 |
|
27 | 28 | # Reassign variable to make it reexported for mypy |
@@ -293,20 +294,21 @@ def sqlmodel_table_construct( |
293 | 294 | # End SQLModel override |
294 | 295 | # Override polymorphic_on default value |
295 | 296 | mapper = inspect(cls) |
296 | | - polymorphic_on = mapper.polymorphic_on |
297 | | - if polymorphic_on is not None: |
298 | | - polymorphic_property = mapper.get_property_by_column(polymorphic_on) |
299 | | - field_info = cls.model_fields.get(polymorphic_property.key) |
300 | | - if field_info: |
301 | | - v = values.get(polymorphic_property.key) |
302 | | - # if model is inherited or polymorphic_on is not explicitly set |
303 | | - # set the polymorphic_on by default |
304 | | - if mapper.inherits or v is None: |
305 | | - setattr( |
306 | | - self_instance, |
307 | | - polymorphic_property.key, |
308 | | - mapper.polymorphic_identity, |
309 | | - ) |
| 297 | + if isinstance(mapper, Mapper): |
| 298 | + polymorphic_on = mapper.polymorphic_on |
| 299 | + if polymorphic_on is not None: |
| 300 | + polymorphic_property = mapper.get_property_by_column(polymorphic_on) |
| 301 | + field_info = cls.model_fields.get(polymorphic_property.key) |
| 302 | + if field_info: |
| 303 | + v = values.get(polymorphic_property.key) |
| 304 | + # if model is inherited or polymorphic_on is not explicitly set |
| 305 | + # set the polymorphic_on by default |
| 306 | + if mapper.inherits or v is None: |
| 307 | + setattr( |
| 308 | + self_instance, |
| 309 | + polymorphic_property.key, |
| 310 | + mapper.polymorphic_identity, |
| 311 | + ) |
310 | 312 | return self_instance |
311 | 313 |
|
312 | 314 | def sqlmodel_validate( |
|
0 commit comments