pydantic递归模型

发布于 2025-02-12 18:52:24 字数 1906 浏览 0 评论 0原文

我正在此另一个 stackoverflow post 字面要指定字符串的唯一数组以用Pydantic验证数据,但我遇到了一个问题递归地召集另一堂课。

这就是我的代码的样子:

from pydantic import BaseModel, PydanticValueError, ValidationError, validator
from typing import Literal,Optional


ACTION_TYPE_MAPPING = Literal["read", "write", "release"]

OBJECT_TYPE_MAPPING = Literal["multiStateValue", "multiStateInput", "multiStateOutput",
                       "analogValue", "analogInput", "analogOutput",
                       "binaryValue", "binaryInput", "binaryOutput"]

BOOLEAN_ACTION_MAPPING = Literal["active", "inactive"]


# MAIN MODEL
class BacnetRequestModel(BaseModel):
    action_type: ACTION_TYPE_MAPPING
    object_type: OBJECT_TYPE_MAPPING
    object_instance: int
    value: Optional[ValueModel(object_type)]  <---- MESSED UP HERE, how to call ValueModel?


class ValueModel(BaseModel):
    multiStateValue: Optional[int]
    multiStateInput: Optional[int]
    multiStateOutput: Optional[int]
    analogValue: Optional[int]
    analogInput: Optional[int]
    analogOutput: Optional[int]
    binaryValue: Optional[BOOLEAN_ACTION_MAPPING]
    binaryInput: Optional[BOOLEAN_ACTION_MAPPING]
    binaryOutput: Optional[BOOLEAN_ACTION_MAPPING]



test = BacnetRequestModel(action_type="write",
                        object_type="binaryOutput",
                        object_instance="3",
                        value = "active"
                          )

如何根据ObjectType将类 code> valueModel 称为,该功能在这种情况下是binaryOutput < /代码>只能接受boolean_action_mapping的值。任何技巧在这里都没有很多智慧...

追溯是:

    value = Optional[ValueModel(object_type)]
NameError: name 'ValueModel' is not defined

I am refencing the answer on this other stackoverflow post on using the Typing library Literal to specify a unique array to strings to validate the data with Pydantic but I am running into a problem of calling another class recursively.

This is what my code looks like:

from pydantic import BaseModel, PydanticValueError, ValidationError, validator
from typing import Literal,Optional


ACTION_TYPE_MAPPING = Literal["read", "write", "release"]

OBJECT_TYPE_MAPPING = Literal["multiStateValue", "multiStateInput", "multiStateOutput",
                       "analogValue", "analogInput", "analogOutput",
                       "binaryValue", "binaryInput", "binaryOutput"]

BOOLEAN_ACTION_MAPPING = Literal["active", "inactive"]


# MAIN MODEL
class BacnetRequestModel(BaseModel):
    action_type: ACTION_TYPE_MAPPING
    object_type: OBJECT_TYPE_MAPPING
    object_instance: int
    value: Optional[ValueModel(object_type)]  <---- MESSED UP HERE, how to call ValueModel?


class ValueModel(BaseModel):
    multiStateValue: Optional[int]
    multiStateInput: Optional[int]
    multiStateOutput: Optional[int]
    analogValue: Optional[int]
    analogInput: Optional[int]
    analogOutput: Optional[int]
    binaryValue: Optional[BOOLEAN_ACTION_MAPPING]
    binaryInput: Optional[BOOLEAN_ACTION_MAPPING]
    binaryOutput: Optional[BOOLEAN_ACTION_MAPPING]



test = BacnetRequestModel(action_type="write",
                        object_type="binaryOutput",
                        object_instance="3",
                        value = "active"
                          )

How do I call the class ValueModel based on the objectType that was inputted to the function where in this case it was binaryOutput that should only accept a value of BOOLEAN_ACTION_MAPPING. Any tips help not a lot of wisdom here...

Traceback is:

    value = Optional[ValueModel(object_type)]
NameError: name 'ValueModel' is not defined

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文