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

Python peewee / fastapi get User without loading Items

所以我按照本教程进行了 kombine fastapi & peewee: link

由于本教程,我得到了那些模型 (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

以及那些基本模型(快速api):

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 Response Model