Pydantic:如何将 str 和 list 传递给同一个变量
Pydantic: How to Pass str and list to the same variable
我有一个程序可以插入对 MongoDB 集合的回复。有些问题需要多项回答。具有多个响应的问题使用复选框,需要单个响应的问题使用单选按钮。
复选框的值存储在数组中,而单选按钮的值存储为字符串。我的问题是,如果用户选择一个复选框,它会将其插入到数据库中,但会通过错误进行多次响应。如何让我的代码根据选择的内容同时接受列表和字符串?
这是我的示例代码
index.ts
questionAnswers: string | strong[]
submit.py
questionAnswers: Optional[str]
如何实现 index.ts 到 submit.py 中的相同逻辑?
谢谢
已编辑
假设我有两个有不同选项的问题。例如:
问题 1
问题:'how did you hear about us?'
选项:['friends'、'radio'、'tv']
上面的选项是一个checkbox
问题 2
问题:'can you help me?'
选项:'yes' 'no'
这使用单选按钮
每个选项都有一个点。我想总结所有选择的选项的分数。所以,如果用户选择 [friends, radio],是的,我想用下面的代码检查选择的内容是否在选项中:
for index, question in enumerate(questions):
questionScore = question['options'].index(question['questionAnswers'])
string | string[]
的 Python 打字等价于 Union[str, List[str]]
。从 Python 3.10(参见 https://www.python.org/dev/peps/pep-0604/)开始,您还可以执行 str | List[str]
.
如果遇到运行时错误,则需要在运行时检查类型,例如:
def handle(question_answers: Union[str, List[str]]):
if isinstance(question_answers, list):
# do thing with list
elif isinstance(question_answers, str):
# do thing with str
else:
raise TypeError("somebody forgot to run mypy")
我有一个程序可以插入对 MongoDB 集合的回复。有些问题需要多项回答。具有多个响应的问题使用复选框,需要单个响应的问题使用单选按钮。
复选框的值存储在数组中,而单选按钮的值存储为字符串。我的问题是,如果用户选择一个复选框,它会将其插入到数据库中,但会通过错误进行多次响应。如何让我的代码根据选择的内容同时接受列表和字符串?
这是我的示例代码
index.ts
questionAnswers: string | strong[]
submit.py
questionAnswers: Optional[str]
如何实现 index.ts 到 submit.py 中的相同逻辑?
谢谢
已编辑 假设我有两个有不同选项的问题。例如:
问题 1 问题:'how did you hear about us?' 选项:['friends'、'radio'、'tv'] 上面的选项是一个checkbox
问题 2 问题:'can you help me?' 选项:'yes' 'no' 这使用单选按钮
每个选项都有一个点。我想总结所有选择的选项的分数。所以,如果用户选择 [friends, radio],是的,我想用下面的代码检查选择的内容是否在选项中:
for index, question in enumerate(questions):
questionScore = question['options'].index(question['questionAnswers'])
string | string[]
的 Python 打字等价于 Union[str, List[str]]
。从 Python 3.10(参见 https://www.python.org/dev/peps/pep-0604/)开始,您还可以执行 str | List[str]
.
如果遇到运行时错误,则需要在运行时检查类型,例如:
def handle(question_answers: Union[str, List[str]]):
if isinstance(question_answers, list):
# do thing with list
elif isinstance(question_answers, str):
# do thing with str
else:
raise TypeError("somebody forgot to run mypy")