簡體   English   中英

是否可以在 pydantic 中使用任意鍵名?

[英]Is it possible to have arbitrary key names in pydantic?

我正在嘗試使用pydantic接口類似的行為,但遇到了一些問題。

在 TS 中考慮以下內容:

export interface SNSMessageAttributes {
    [name: string]: SNSMessageAttribute;
}

是否有可能在 pydantic 中實現這一點?

這是我的 python 示例代碼:

from pydantic import BaseModel, parse_obj_as
from typing import Optional

class Values(BaseModel):
    Value: str
    Type: str

class MessageAttributes(BaseModel):
    ArbitraryKey: Optional[Values]


class Mymodel(BaseModel):
    MessageAttributes: Optional[MessageAttributes]


data = {"MessageAttributes": {"ArbitraryKey": {"Type": "String", "Value": "TestString"}}}

parsed = parse_obj_as(Mymodel, data)

print(parsed.MessageAttributes.ArbitraryKey.Value)
# TestString

在此示例中,屬性ArbitraryKey可以是任何值。 但我不可能對所有可能的鍵名進行硬編碼。 例如,如果鍵名是SomeTestKey而不是ArbitraryKey怎么辦?

我知道我可以在Config中使用extra = 'allow ,但這不會給出我在使用parse_obj_as時可以獲得的點語法

我的問題是,如果可能的話,我可以在 pydantic 中為屬性名稱做類似於[name: string]的事情嗎?

經過討論是Github ,這正是我所希望的。

from pydantic import BaseModel, parse_obj_as
from typing import Dict, Optional

from pydantic import parse

class Values(BaseModel):
    Value: str
    Type: str


class Mymodel(BaseModel):
    MessageAttributes: Optional[Dict[str, Values]]


data = {"MessageAttributes": {"ArbitraryKey": {"Type": "String", "Value": "TestString"}}}

parsed = Mymodel.parse_obj(data)

print(parsed)
print(parsed.MessageAttributes['ArbitraryKey'].Type)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM