0

我有以下模型/模式:

class UserBase(SQLModel):
    full_name: str
    email: EmailStr
    is_active: bool = True
    is_superuser: bool = False


class UserRead(UserBase):
    id: uuid.UUID


class UserCreate(UserBase, extra=Extra.forbid):
    password: str


class UserUpdate(UserBase):
    password: Optional[str] = None


class User(UserBase, table=True):
    id: uuid.UUID = Field(
        default_factory=uuid.uuid4,
        primary_key=True,
        index=True,
        nullable=False,
    )
    hashed_password: Optional[str] = None

在我的 postgres 客户端中,该表按字段在模型/模式中列出的顺序显示列:

postgres 客户端

此外,openapi 文档按照它们在模型中指定的顺序列出了响应对象字段User(请注意图像底部的响应对象):

开放API文档

我希望id成为表/响应对象中显示的第一列/字段。一般来说,如何强制执行列/字段的特定顺序?

4

1 回答 1

0

正如评论中所讨论的,没有必要对 json 输出进行排序,因为 json 客户端不关心数据顺序。

关于你的sql db中的数据顺序,你可以对它们进行排序,这只是模型继承的问题(它也会导致我们之前讨论的json顺序)

您应该遵循一些关于您将哪些数据放入数据库中的规则。

在经典的 sql 表中,您将第一列作为 ID,并且用于生成它们的模型应与此结构匹配。

由于 ID 是所有用户都将拥有的数据,它应该在您的基本模型中,因此相同的规则适用于您的所有基本用户数据。

我会做什么(按照lib中的例子):

class UserBase(SQLModel, table=True):
    id: uuid.UUID = Field(
        default_factory=uuid.uuid4,
        primary_key=True,
        index=True,
        nullable=False,
    )
    hashed_password: Optional[str] = None
    full_name: str
    email: EmailStr
    is_active: bool = True
    is_superuser: bool = False

有了它,您可以制作其他派生自它的类。(如有必要)

于 2021-11-22T10:04:38.303 回答