我有这样的模型、枚举、字段:
from pydantic import BaseModel, Json
class SlotActionEnum(Enum):
NORMAL = 'normal'
REASK = 'reask'
class ChannelMessage(Json):
answerText: str
slot_action: SlotActionEnum = SlotActionEnum.NORMAL
class Request(BaseModel):
conversationId: str
channelMessage: ChannelMessage
o = Request(**{
"conversationId": "id10",
"channelMessage": "{\"answerText\": \"sadfg\", \"slot_action\": \"reask\"}"
})
这里有两个问题:
slot_action
不能像这样访问:o.channelMessage.slot_action
这会导致AttributeError:
AttributeError: 'dict' object has no attribute 'slot_action'
如果我通过方括号访问此字段:
slot_action
中的值不是slotaconenum,而是类似于reask
或normal
的值
slot_action
可以是空字符串。如何将空字符串替换为normal
我应该如何处理这些问题?我是否应该这样做:
class ChannelMessage(BaseModel):
answerText: str
slot_action: SlotActionEnum = SlotActionEnum.NORMAL
class Request(BaseModel):
conversationId: str
channelMessage: ChannelMessage
def __init__(__pydantic_self__, **data: Any) -> None:
channel_message = json.loads(data.pop('channelMessage'))
if channel_message['slot_action'] == '':
channel_message['slot_action'] = SlotActionEnum.NORMAL.value
channel_message['slot_action'] = SlotActionEnum(channel_message['slot_action'])
super().__init__(**data, channelMessage=channel_message)
??好吧,这很管用,但看起来很难看
相关问题 更多 >
编程相关推荐