Pydantic 模型之间的两种关系

Two way relation between Pydantic models

假设一个用户有多个 post,而一个 post 只有一个用户。我想知道是否有一种方法可以指定双向关系(如果它是可取的)?尝试以下操作时,会导致“NameError:名称 'Post' 未定义”。

from typing import List
from pydantic import BaseModel

class User(BaseModel):
    id: int
    posts: List[Post]
    
class Post(BaseModel):
    id: int
    user: User

Pydantic 新手,如有任何帮助,我们将不胜感激!

您可以通过 postponed annotations:

from typing import List
from pydantic import BaseModel


class User(BaseModel):
    id: int
    posts: "List[Post]"


class Post(BaseModel):
    id: int
    user: User


User.update_forward_refs()

来自the same source的另一种方法:

from __future__ import annotations
from typing import List
from pydantic import BaseModel

class User(BaseModel):
    id: int
    posts: List[Post]
    
class Post(BaseModel):
    id: int
    user: User

user = User(id=1, posts=[])
post = Post(id=1, user=user)

P.S。但它看起来像错误的设计。最好选择一个方向。