假设我在获取json数据的地方有webhook。此json由pydantic递归转换。
@app.route("/", methods=['POST'])
async def telegram_webhook(request):
update = Update.parse_obj(request.json)
/* do something with update */
我用 Update 模型(内部包含 Message 模型)检查此json是 minimum 个有效对象:
class Update(BaseModel):
update_id: int
message: Message
...
class Message(BaseModel):
message_id: int
text: Optional[str]
但是稍后在代码中我想扩展验证,因此要检查消息不仅是消息,而且是 TextMessage :
// text field now is required
class TextMessage(Message):
text: str
@validator('text')
def check_text_length(cls, value):
length = len(value)
if length > 4096:
raise ValueError(f'text length {length} is too large')
return value
所以我将消息传递给验证功能
def process_text_message(message):
text_message = TextMessage.parse_obj(message)
但是我收到错误消息,要求 pydantic 不需要 Message 类型,而需要 dict 。
我该怎么做? 我如何才能对已验证(基本)的数据进行附加验证?
答案 0 :(得分:1)
简短的答案是:使用message.dict()
:
def process_text_message(message):
text_message = TextMessage.parse_obj(message.dict())
更长的答案是应该固定parse_obj
以应对“ dict-like”之类的问题,而不仅仅是字典,我将在the issues you created上进行解释。