2

假设我想要一个 User 模型,其中还包含“friends”字段,该字段必须是用户列表:

class User(BaseModel):
    id: int
    name: str
    friends: List[User]

但这是不可能的。有没有办法实现这种行为?

4

1 回答 1

3

是的,您需要使用update_forward_refs,请参阅文档中的自引用模型

from typing import List

from devtools import debug

from pydantic import BaseModel


class User(BaseModel):
    id: int
    name: str
    friends: List['User']


User.update_forward_refs()

u = User(id=123, name='hello', friends=[dict(id=321, name='goodbye', friends=[])])

debug(u)

输出:

test.py:18 <module>
    u: User(
        id=123,
        name='hello',
        friends=[
            User(
                id=321,
                name='goodbye',
                friends=[],
            ),
        ],
    ) (User)
于 2019-12-11T11:25:19.840 回答