Question: Unable to get related fields when using GET method
Hi there, I'm trying to get some related fields via GET method, but when I try it I only get default value e.g null. Maybe there's someone who can explain where I'm wrong?
I'm getting the Item object in swagger, but without SupplierItem and Images relations.
models\item.py
class Item(Base):
id = Column(Integer, primary_key=True, index=True)
title = Column(String, index=True)
article = Column(String, index=True)
description = Column(String, index=True)
vat_id = Column(Integer, ForeignKey("vat.id"))
vat = relationship("Vat")
manufacturer_id = Column(Integer, ForeignKey("manufacturer.id"))
manufacturer = relationship("Manufacturer", back_populates="items")
unit_id = Column(Integer, ForeignKey("unit.id"))
price = relationship("Price", back_populates="item")
images = relationship("Image", back_populates="item")
supplier_items = relationship("SupplierItem", back_populates="item")
is_active = Column(Boolean, default=True)
models\supplier_item.py
class SupplierItem(Base):
id = Column(Integer, primary_key=True, index=True)
title = Column(String, index=True, unique=True)
is_active = Column(Boolean, default=True)
price = relationship("Price", back_populates="supplier_item")
supplier_id = Column(Integer, ForeignKey("supplier.id"))
supplier = relationship("Supplier", back_populates="supplier_items")
item_id = Column(Integer, ForeignKey("item.id"))
item = relationship("Item", back_populates="supplier_items")
schemas\item.py
class ItemBase(BaseModel):
id: int
title: Optional[str] = None
description: Optional[str] = None
article: Optional[str] = None
manufacturer: Optional[Manufacturer] = None
unit: Optional[Unit] = None
price: Optional[List[Price]] = None
vat: Optional[Vat] = None
image: Optional[List[Image]] = None
supplier_item: Optional[List[SupplierItem]] = None
endpoints\items.py
@router.get("/{id}", response_model=schemas.Item)
def read_item(
*,
db: Session = Depends(deps.get_db),
id: int,
current_user: models.User = Depends(deps.get_current_active_user),
) -> Any:
"""
Get item by ID.
"""
item = crud.item.get(db=db, id=id)
if not item:
raise HTTPException(status_code=404, detail="Item not found")
if not crud.user.is_superuser(current_user):
raise HTTPException(status_code=400, detail="Not enough permissions")
return item
In schemas do we have Item class?
I see you only mentioned ItemBase class.
If not...
response_model should be schemas.ItemBase
In schemas do we have Item class?
I see you only mentioned ItemBase class.
If not...
response_model should be schemas.ItemBase
Yes, I've simpled everything down to one base class and just inherited everything else.