Похожие чаты

Ребят, всем привет. Столкнулся с проблемой. Есть две модели. User: class User(Base):

"""
Модель пользователя
"""

__tablename__ = "users"

id: Mapped[uuid.UUID] = mapped_column(primary_key=True, default=uuid.uuid4)
username: Mapped[str] = mapped_column(unique=True)
email: Mapped[str] = mapped_column(unique=True)
password: Mapped[str]
created_date: Mapped[datetime.datetime] = mapped_column(
default=datetime.datetime.utcnow
)

posts: Mapped[list["Post"]] = relationship(
back_populates="user",
lazy="selectin",
)

@property
def count_posts(self) -> int:
return len(self.posts)
Post:
class Post(Base):
"""
Модель поста
"""

__tablename__ = "posts"

id: Mapped[int] = mapped_column(primary_key=True)
owner_id: Mapped[uuid.UUID] = mapped_column(
ForeignKey("users.id", ondelete="CASCADE")
)
title: Mapped[str]
text: Mapped[str]
updated_date: Mapped[datetime.datetime | None] = mapped_column(
onupdate=datetime.datetime.utcnow()
)
created_date: Mapped[datetime.datetime] = mapped_column(
default=datetime.datetime.utcnow()
)

user: Mapped["User"] = relationship(
back_populates="posts",
lazy="joined",
)
Получаю все посты следующей функцией:
async def get_posts(
session: AsyncSession,
) -> list[Post | None]:
"""
Получение всех постов из БД
"""

async with session.begin():
query = select(Post)
posts = await session.scalars(query)
return posts
Далее при сериализации через pydantic получаю следующую ошибку:
pydantic_core._pydantic_core.ValidationError: 1 validation error for GetPost
user.count_posts
Error extracting attribute: MissingGreenlet: greenlet_spawn has not been called; can't call await_only() here. Was IO attempted in an unexpected place? (Background on this error at: https://sqlalche.me/e/20/xd2s) [type=get_attribute_error, input_value=<db.models.User object at 0x7f937c640370>, input_type=User]
For further information visit https://errors.pydantic.dev/2.1/v/get_attribute_error
Сам сериализатор:
class GetPost(BaseModel):
"""
Схема получение поста
"""

id: int
title: str
text: str
updated_date: datetime.datetime | None
created_date: datetime.datetime
user: GetUser

class Config:
from_attributes = True
Уже несколько часов бьюсь с проблемой. Пока что нашел единственное решение в изменении функции get_posts, а именно в изменении query:
query = select(Post).options(joinedload(Post.user).selectinload(User.posts))
Может кто-то сталкивался с таким? Заранее спасибо за ответ.

4 ответов

100 просмотров

Убирай порятнку на pastebin.com

> Уже несколько часов бьюсь с проблемой. Пока что нашел единственное решение в изменении функции get_posts, а именно в изменении query: query = select(Post).options(joinedload(Post.user).selectinload(User.posts)) Может кто-то сталкивался с таким? Заранее спасибо за ответ. Ты читал официальный туториал алхимии?

Upi- Автор вопроса

Все сталкивались. В этом разделе написано что делать.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
@Benzenoid can you tell me the easiest, and safest way to bu.y HEX now?
Živa Žena
20
This is a question from my wife who make a fortune with memes 😂😂 About the Migration and Tokens: 1. How will the old tokens be migrated to the new $LGCYX network? What is th...
🍿 °anton°
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
What is the Dex situation? Agora team started with the Pnetwork for their dex which helped them both with integration. It’s completed but as you can see from the Pnetwork ann...
Ben
1
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Anyone knows where there are some instructions or discort about failed bridge transactions ?
Jochem
21
@lozuk how do I get my phex copies of my ehex from a atomic wallet, to move to my rabby?
Justfrontin 👀
11
Карта сайта