Код: Выделить всё
src/
schemas/
foo.py
bar.py
models/
foo.py
bar.py
Код: Выделить всё
#foo.py
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from src.models.bar import Bar
class Foo(Base):
x: Mapped[int] = mapped_column(Integer)
y: Mapped["Bar"] = relationship("Bar", back_populates="b")
#bar.py
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from src.models.foo import Foo
class Bar(Base):
a: Mapped[int] = mapped_column(Integer)
b: Mapped["Foo"] = relationship("Foo", back_populates="y")
Код: Выделить всё
#foo.py
from pydantic import BaseModel, Field, field_validator
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from src.schemas.bar import Bar
class Foo(BaseModel):
x: int = Field(...)
y: "Bar" = Field(...)
# bar.py
from pydantic import BaseModel, Field, field_validator
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from src.schemas.foo import Foo
class Bar(BaseModel):
a: int = Field(...)
b: "Foo" = Field(...)
Код: Выделить всё
#foo.py
from pydantic import BaseModel, Field, field_validator
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from src.schemas.bar import Bar
class Foo(BaseModel):
x: int = Field(...)
y: "Bar" = Field(...)
@field_validator("y", mode="before")
@classmethod
def validate_relationship(cls, v: Any):
return Bar.model_validate(v)
# bar.py
from pydantic import BaseModel, Field, field_validator
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from src.schemas.foo import Foo
class Bar(BaseModel):
a: int = Field(...)
b: "Foo" = Field(...)
@field_validator("b", mode="before")
@classmethod
def validate_relationship(cls, v: Any):
return Bar.model_validate(v)
Как устранить эту ошибку, не сталкиваясь с циклический импорт
Я определил средства защиты импорта TYPE_CHECKING, импортируя аннотации из пакета futures, отложенную загрузку модулей.
Подробнее здесь: https://stackoverflow.com/questions/784 ... date-while