|
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