# category.py
from __future__ import annotations
from sqlmodel import Field, SQLModel, Relationship
from .defaults import UUIDModel, TimestampModel
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from app.api.database.models.item import Item, ItemPublicGeneric
from app.api.database.models.blog import Blog, BlogPublicGeneric
class CategoryBase(SQLModel):
name: str
class Category(TimestampModel, CategoryBase, UUIDModel, table=True):
items: list["Item"] = Relationship(
back_populates="category",
sa_relationship_kwargs={"lazy": "joined"},
)
blogs: list["Blog"] = Relationship(
back_populates="category",
sa_relationship_kwargs={"lazy": "joined"},
)
class CategoryCreate(CategoryBase):
pass
class CategoryPublic(TimestampModel, CategoryBase, UUIDModel):
items: list["ItemPublicGeneric"] = []
blogs: list["BlogPublicGeneric"] = []
class CategoryPublicGeneric(TimestampModel, CategoryBase, UUIDModel):
pass
class CategoryUpdate(CategoryBase):
pass
В категории.py в этой строке blogs: list["BlogPublicGeneric"] = [] я получаю эту ошибку. PydanticUndefineAnnotation: имя «BlogPublicGeneric» не определено. Более интересная часть: если я просто импортирую и использую «BlogPublic» вместо «BlogPublicGeneric», это работает без ошибок. Но, как вы можете видеть в blog.py, «BlogPublicGeneric» на самом деле является более простой моделью. Я не понимаю, почему это вызывает ошибку. Любая помощь приветствуется.
Я пробовал это с разными классами. Я пытался избавиться от TYPE_CHECKING, но в настоящее время это невозможно из-за проблемы циклического импорта.
Я использую SQLModel для проекта. Но я столкнулся с проблемой с аннотациями типов. [code]# blog.py from __future__ import annotations from sqlmodel import Field, SQLModel, Relationship from .defaults import UUIDModel, TimestampModel from app.api.database.models.blogItem import BlogItem from app.api.database.models.image import Image, ImagePublic from app.api.database.models.blogImage import BlogImage from app.api.database.models.section import Section, SectionPublic from app.api.database.models.tag import Tag, TagPublic from app.api.database.models.blogTag import BlogTag from app.api.database.models.metaTag import MetaTag, MetaTagPublic from app.api.database.models.blogMetaTag import BlogMetaTag from app.api.database.models.item import Item, ItemPublic from app.api.database.models.category import Category, CategoryPublic
from uuid import UUID
class BlogBase(SQLModel): title: str = Field(index=True) author: str = Field(index=True) description: str read_time: int
class BlogPublicGeneric(TimestampModel, BlogBase, UUIDModel): pass
class BlogUpdate(BlogCreate): pass
[/code] [code]# category.py from __future__ import annotations from sqlmodel import Field, SQLModel, Relationship from .defaults import UUIDModel, TimestampModel from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING: from app.api.database.models.item import Item, ItemPublicGeneric from app.api.database.models.blog import Blog, BlogPublicGeneric
class CategoryPublicGeneric(TimestampModel, CategoryBase, UUIDModel): pass
class CategoryUpdate(CategoryBase): pass
[/code] В категории.py в этой строке blogs: list["BlogPublicGeneric"] = [] я получаю эту ошибку. PydanticUndefineAnnotation: имя «BlogPublicGeneric» не определено. Более интересная часть: если я просто импортирую и использую «BlogPublic» вместо «BlogPublicGeneric», это работает без ошибок. Но, как вы можете видеть в blog.py, «BlogPublicGeneric» на самом деле является более простой моделью. Я не понимаю, почему это вызывает ошибку. Любая помощь приветствуется. Я пробовал это с разными классами. Я пытался избавиться от TYPE_CHECKING, но в настоящее время это невозможно из-за проблемы циклического импорта.