A Пользовательская модель содержит два разных отношения «1 ко многим». По неизвестным причинам первая связь всегда загружается автоматически, хотя этого и не должно происходить. Второе соотношение работает должным образом.
Мои модели:
Код: Выделить всё
class User(Base):
__tablename__ = "user"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid7, unique=True, nullable=False)
email = Column(String, unique=True, index=True)
hashed_password = Column(String)
is_active = Column(Boolean, default=True)
items = relationship("Item", back_populates="owner", lazy="select")
datastreams = relationship("DataStream", back_populates="owner", lazy="select")
class Item(Base):
__tablename__ = "item"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid7, unique=True, nullable=False)
title = Column(String, index=True)
description = Column(String, index=True)
owner_id = Column(UUID(as_uuid=True), ForeignKey("user.id"))
owner = relationship("User", back_populates="items")
class DataStream(Base):
__tablename__ = "data_stream"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid7, unique=True, nullable=False)
name = Column(String, index=True)
description = Column(String, index=True)
type = Column(data_stream_type_enum, nullable=False) # Enum for type: 'folder' or 'stream'
parent_id = Column(UUID(as_uuid=True), ForeignKey("data_stream.id"), nullable=True) # Self-referencing foreign key
owner_id = Column(UUID(as_uuid=True), ForeignKey("user.id"))
owner = relationship("User", back_populates="datastreams")
# Self-referential relationship for parent/child hierarchy
parent = relationship("DataStream", remote_side=[id], backref="children")
Код: Выделить всё
def get_user(db: Session, user_id: UUID):
return db.query(models.User).filter(models.User.id == user_id).first()
def get_users(db: Session, skip: int = 0, limit: int = 100):
return db.query(models.User).offset(skip).limit(limit).all()
Код: Выделить всё
from pydantic import BaseModel
class UserBase(BaseModel):
email: str
class User(UserBase):
id: UUID
is_active: bool
items: list[Item] = []
dataStreams: list[DataStream] = []
class Config:
orm_mode = True
Код: Выделить всё
@router.get("/", response_model=list[user_schemas.User])
def read_users(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
users = crud.get_users(db, skip=skip, limit=limit)
return users
@router.get("/{user_id}", response_model=user_schemas.User)
def read_user(user_id: UUID, db: Session = Depends(get_db)):
db_user = crud.get_user(db, user_id=user_id)
if db_user is None:
raise HTTPException(status_code=404, detail="User not found")
return db_user
Код: Выделить всё
[
{
"email": “xxx@yyy”,
"id": "066fbcc7-61ff-7359-8000-440710dffadc",
"is_active": true,
"items": [
{
"title": "string",
"description": "string",
"id": "066fc123-237d-73e4-8000-bc6b98e36cfa",
"owner_id": "066fbcc7-61ff-7359-8000-440710dffadc"
},
{
"title": "string",
"description": "string",
"id": "066fc149-10bc-7569-8000-a629cd4d7e52",
"owner_id": "066fbcc7-61ff-7359-8000-440710dffadc"
}
],
"dataStreams": []
}
]
- Почему элементы загружаются автоматически, а потоки данных — нет?< /li>
Как избежать автоматической загрузки элементов?
Подробнее здесь: https://stackoverflow.com/questions/790 ... -not-alway