Así que seguí este tutorial para kombine fastapi & peewee: enlace
Y debido a este tutorial obtuve esos modelos (peewee):
class User(peewee.Model): email = peewee.CharField(unique=True, index=True) hashed_password = peewee.CharField() is_active = peewee.BooleanField(default=True) class Meta: database = db class Item(peewee.Model): title = peewee.CharField(index=True) description = peewee.CharField(index=True) owner = peewee.ForeignKeyField(User, backref="items") class Meta: database = dbY esos modelos base (fastapi):
class PeeweeGetterDict(GetterDict): def get(self, key: Any, default: Any = None): res = getattr(self._obj, key, default) if isinstance(res, peewee.ModelSelect): return list(res) return res class ItemBase(BaseModel): title: str description: Optional[str] = None class ItemCreate(ItemBase): pass class Item(ItemBase): id: int owner_id: int class Config: orm_mode = True getter_dict = PeeweeGetterDict class UserBase(BaseModel): email: str class UserCreate(UserBase): password: str class User(UserBase): id: int is_active: bool items: List[Item] = [] class Config: orm_mode = True getter_dict = PeeweeGetterDictTengo esto para llamar a la API:
database.db.connect() database.db.create_tables([User, Item]) database.db.close() app = FastAPI() def get_db(db_state=Depends(reset_db_state)): try: database.db.connect() yield finally: if not database.db.is_closed(): database.db.close() @app.get("/users/", response_model=List[schemas.User], dependencies=[Depends(get_db)]) def read_users(): return list(models.User.select()Esta es la base. Ahora comienza mi problema/pregunta:
Si llamo a esta solicitud (GET "/users/"), obtengo el siguiente JSON como resultado (los datos son imaginarios, solo se trata de la estructura)
[ { "email": "123@test.com" "id": 1 "is_active": 1 "items": [ { "title": "item1" "description": "placeholder" "id": "1" "owner_id": "1" } ] } ]Así es como se supone que debe ser, PERO no lo quiero exactamente así. Quiero que solo obtenga los datos del usuario, sin sus elementos.
Entonces... mi pregunta:
¿Cómo puedo obtener los datos del usuario sin cargar los datos de los artículos?
Hay una manera simple de hacerlo, response_model_exclude es exactamente lo que está buscando.
@app.get("/users/", response_model=List[schemas.User], response_model_exclude={"items"}, dependencies=[Depends(get_db)]) def read_users(): return list(models.User.select()