Похожие чаты

Ребят, всем привет. Столкнулся с проблемой. Есть две модели. 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 ответов

33 просмотра

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

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

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

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

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

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

А кто-то пробовал, уезжая из Эстонии получить э-рез и продолжить вести предпринимательскую деятельность внутри Эстонии, используя свой OÜ?
Lalalashechki Lalala
62
isn't utxo commitements pretty close though if someone wanted to get it over the finish line? my understanding is that most of the ground work was already down by verde
Luke High - Rabbi Of Bcash High Rabbi Of Bcash
23
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
Чем оно проблема?
Nikita Uzumaki
21
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
is the buyback program live and at what prices are the purchases fixed? excuse me for the bland PA question, sophisticated defi people keke
Imnothere
16
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Hi, I was reading this https://twitter.com/HouseofChimera/status/1778078991762780408 about Verasity and their likely choice of Tron as blockchain for their token for its low f...
Jordi
13
@samkazemian - couple questions: Update on frxBTC? - This would do well with the current influx of institutional investment entering the space Update on future veFXS streams...
Costi
16
Заметил в ghci 9.4.8: > :t (<*>) @((->)_) (<*>) @((->)_) :: (w -> (a -> b)) -> (w -> a) -> w -> b Разве не должно (w -> (a -> b)) быть записано как (w -> a -> b)? Это баг, ил...
Михаил
13
Карта сайта