Python peewee/fastapi在不加载项的情况下获取用户



所以我按照本教程学习了kombine fastapi&小便器:链路

由于这个教程,我得到了这些模型(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 = db

以及那些基础模型(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 = PeeweeGetterDict

我有这个调用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()

这是基地。现在开始我的问题:

如果我调用这个请求(GET"/users/"(,我会得到以下JSON作为结果(数据是虚构的,它只是关于结构(

[
{
"email": "123@test.com"
"id": 1
"is_active": 1
"items": [
{
"title": "item1"
"description": "placeholder"
"id": "1"
"owner_id": "1"
}
]
}
]

这就是它应该是的我不希望它完全是这样。我希望我获取用户数据,而不获取其项。

所以。。。我的问题:

如何在不加载项目数据的情况下获取用户数据

有一种简单的方法可以做到这一点,response_model_exclude正是您想要的。

@app.get("/users/", response_model=List[schemas.User], response_model_exclude={"items"}, dependencies=[Depends(get_db)])
def read_users():
return list(models.User.select()

参考:FastAPI响应模型

最新更新