FastAPI pydantic.error_wrappers.Ошибка проверки

#python-3.x #sqlalchemy #fastapi

Вопрос:

Я использую приведенную ниже модель и схему в FastAPI.

Модели

 class Item(Base):
    __tablename__ = "items"

    id = Column(Integer, primary_key=True,index=True)
    name = Column(String(80), nullable=False, unique=True,index=True)
    price = Column(Float(precision=2), nullable=False)
    description = Column(String(200))
    store_id =Column(Integer,ForeignKey('stores.id'),nullable=False)
    def __repr__(self):
        return 'ItemModel(name=%s, price=%s,store_id=%s)' % (self.name, self.price,self.store_id)
    
class Store(Base):
    __tablename__ = "stores"
    id = Column(Integer, primary_key=True,index=True)
    name = Column(String(80), nullable=False, unique=True)
    items = relationship("Item",lazy="dynamic",primaryjoin="Store.id == Item.store_id")

    def __repr__(self):
        return 'Store(name=%s)' % self.name
 

Схемы

 class ItemBase(BaseModel):
    name: str
    price : float
    description: Optional[str] = None
    store_id: int


class ItemCreate(ItemBase):
    pass


class Item(ItemBase):
    id: int

    class Config:
        orm_mode = True


class StoreBase(BaseModel):
    name: str

class StoreCreate(StoreBase):
    pass

class Store(StoreBase):
    id: int
    items: List[Item] = []

    class Config:
        orm_mode = True
 

Я создал объект хранилища в базе данных. Когда я пытаюсь получить все хранилища, хранящиеся в базе данных, используя приведенный ниже API.

 @app.get('/stores', tags=["Store"],response_model=List[schemas.Store])
def get_all_stores(name: Optional[str] = None,db: Session = Depends(get_db)):
    """
    Get all the Stores stored in database
    """
    if name:
        stores =[]
        db_store = StoreRepo.fetch_by_name(db,name)
        print(db_store)
        stores.append(db_store)
        return stores
    else:
        return StoreRepo.fetch_all(db)

 
 [packages]
fastapi = "==0.68.1"
uvicorn = "==0.15.0"
sqlalchemy = "==1.4.23"
 

Я получаю приведенное ниже исключение

 raise ValidationError(errors, field.type_)
 

pydantic.error_wrappers.Ошибка проверки: 1 ошибка проверки для
ответа магазина -> 0 ->>
значение элементов не является допустимым списком (тип=type_error.list)

Если мы удалим response_model=Список[схем.Магазин] из API, то он работает нормально.

Любая помощь будет оценена по достоинству.

Ответ №1:

Я могу решить вышеуказанную проблему после обновления модели отношений в магазине.

 items = relationship("Item",primaryjoin="Store.id == Item.store_id",cascade="all, delete-orphan")
 

Делюсь им на случай, если это кому-то поможет.