Pydantic 2.x жалуется на отсутствующее поле, даже если оно необязательно со значением по умолчаниюPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Pydantic 2.x жалуется на отсутствующее поле, даже если оно необязательно со значением по умолчанию

Сообщение Anonymous »

У меня есть эта базодель: < /p>
class CameraConfigurationDto(BaseModel):
id: int
name: str
direction: CameraPositionDto
serial: Optional[str] = None
< /code>
Я пытаюсь проанализировать файл json со списком этих конфигураций камеры, у некоторых из них есть набор серийных номеров, другие нет. Если я скопирую фиктивное последовательное значение для всех конфигураций камеры, модель хорошо анализирует, однако с отсутствующим параметром в JSON я получаю ValidationError , например:

pydantic_core._pydantic_core.validationError: 4 ошибки проверки для
ConfigurationDto Cameras.2.serial Поле требуется [type = отсутствует,
input_value = {'id': 2, 'имя': ' top_fr ...- 493.0, 'z_end': 380.0}},
input_type = dict]
Для получения дополнительной информации посетите https://errors.pydantic.dev/2.10/v/missing
< /blockquote>
iirc Это должно быть поведение для проверки Pydantics: < /p>
serial: str # parameter required, needs a string value
serial: Optional[str] # parameter required, but can be set to None
serial: Optional[str] = None # parameter is not required, will be set to None by default if not existing
< /code>
Это не правильно? Очевидно, что я что -то упускаю здесь ... < /p>
Вот полная модель пидантики и код для загрузки для контекста: < /p>
from typing import List, Optional

from pydantic import BaseModel

class CameraPositionDto(BaseModel):
x_start: float
y_start: float
z_start: float
x_end: float
y_end: float
z_end: float

class ComponentPositionDto(BaseModel):
x: float
y: float
z: float
rotation_x: float = 0.0
rotation_y: float = 0.0
rotation_z: float = 0.0

class CameraConfigurationDto(BaseModel):
id: int
name: str
direction: CameraPositionDto
serial: Optional[str] = None

class ComponentConfigurationDto(BaseModel):
name: str
position: ComponentPositionDto

class ConfigurationDto(BaseModel):
cameras: List[CameraConfigurationDto]
components: List[ComponentConfigurationDto]
< /code>
main.py:
from dto import ConfigurationDto

def main():
with open("config.json", "r") as config_file:
config = ConfigurationDto.model_validate_json(config_file.read())
print("hello world")
print(config)

if __name__ == "__main__":
main()


Подробнее здесь: https://stackoverflow.com/questions/793 ... with-a-def
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»