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")