Skip to content

Commit 5ff875e

Browse files
committed
Fix This ForeignKey already has a parent for test_base_model_fk
1 parent 5b4509a commit 5ff875e

File tree

2 files changed

+9
-18
lines changed

2 files changed

+9
-18
lines changed

sqlmodel/main.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import ipaddress
44
import uuid
55
import weakref
6+
from copy import copy
67
from datetime import date, datetime, time, timedelta
78
from decimal import Decimal
89
from enum import Enum
@@ -750,7 +751,7 @@ def get_column_from_field(field: Any) -> Column: # type: ignore
750751
args.append(ForeignKey(foreign_key, ondelete=ondelete))
751752
else:
752753
assert isinstance(foreign_key, ForeignKey)
753-
args.append(foreign_key.copy())
754+
args.append(copy(foreign_key))
754755
kwargs = {
755756
"primary_key": primary_key,
756757
"nullable": nullable,
@@ -766,7 +767,11 @@ def get_column_from_field(field: Any) -> Column: # type: ignore
766767
kwargs["default"] = sa_default
767768
sa_column_args = getattr(field_info, "sa_column_args", Undefined)
768769
if sa_column_args is not Undefined:
769-
args.extend(list(cast(Sequence[Any], sa_column_args)))
770+
for arg_v in sa_column_args:
771+
if isinstance(arg_v, ForeignKey):
772+
args.append(copy(arg_v))
773+
else:
774+
args.append(arg_v)
770775
sa_column_kwargs = getattr(field_info, "sa_column_kwargs", Undefined)
771776
if sa_column_kwargs is not Undefined:
772777
kwargs.update(cast(Dict[Any, Any], sa_column_kwargs))

tests/test_field_sa_fk_args_kwargs.py

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
1-
import contextlib
21
import re
32
from typing import Optional
43

5-
import pytest
6-
import sqlalchemy.exc
74
from sqlalchemy import ForeignKey, create_engine
85
from sqlmodel import Field, SQLModel
9-
from sqlmodel._compat import IS_PYDANTIC_V2
106

117

128
def test_base_model_fk(clear_sqlmodel, caplog) -> None:
@@ -21,18 +17,8 @@ class Base(SQLModel):
2117
class Asset(Base, table=True):
2218
id: Optional[int] = Field(default=None, primary_key=True)
2319

24-
# Fails in Pydantic v2, but not v1
25-
with (
26-
pytest.raises(sqlalchemy.exc.InvalidRequestError)
27-
if IS_PYDANTIC_V2
28-
else contextlib.nullcontext()
29-
) as e:
30-
31-
class Document(Base, table=True):
32-
id: Optional[int] = Field(default=None, primary_key=True)
33-
34-
if e:
35-
assert "This ForeignKey already has a parent" in str(e.errisinstance)
20+
class Document(Base, table=True):
21+
id: Optional[int] = Field(default=None, primary_key=True)
3622

3723
engine = create_engine("sqlite://", echo=True)
3824
SQLModel.metadata.create_all(engine)

0 commit comments

Comments
 (0)