РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
186 of 307 menu

Параметр from_attributes

Параметр from_attributes передаётся в model_config или в функцию ConfigDict и разрешает создавать экземпляр модели из произвольного объекта, а не только из словаря или JSON. Когда параметр включён, Pydantic читает значения полей из атрибутов переданного объекта с теми же именами, что и у полей модели. Это удобно, например, при работе с ORM-объектами, у которых данные хранятся в виде атрибутов, а не в виде словаря. Значением параметра является булево значение: True или False. По умолчанию параметр выключен.

Синтаксис

model_config = ConfigDict(from_attributes=True)

Пример

Давайте создадим модель с включённым параметром from_attributes и построим её из обычного объекта:

from pydantic import BaseModel, ConfigDict class User(BaseModel): model_config = ConfigDict(from_attributes=True) name: str age: int class Profile: def __init__(self, name, age): self.name = name self.age = age profile = Profile('abcde', 25) user = User.model_validate(profile) print(user)

Результат выполнения кода:

name='abcde' age=25

Пример

Давайте сравним поведение модели без параметра from_attributes при попытке построить её из объекта:

<+python+> from pydantic import BaseModel, ValidationError class User(BaseModel): name: str age: int class Profile: def __init__(self, name, age): self.name = name self.age = age profile = Profile('abcde', 25) try: user = User.model_validate(profile) print(user) except ValidationError as error: print(error) <-python+>

Результат выполнения кода:

2 validation errors for User name Input should be a valid string [type=string_type, input_value=<__main__.Profile object at 0x...>, input_type=Profile] For further information visit https://errors.pydantic.dev/2.0/v/string_type age Input should be a valid integer [type=int_type, input_value=<__main__.Profile object at 0x...>, input_type=Profile] For further information visit https://errors.pydantic.dev/2.0/v/int_type

Пример

Давайте используем модель с from_attributes в маршруте FastAPI, чтобы вернуть данные из ORM-подобного объекта:

from fastapi import FastAPI from pydantic import BaseModel, ConfigDict app = FastAPI() class User(BaseModel): model_config = ConfigDict(from_attributes=True) name: str age: int class Profile: def __init__(self, name, age): self.name = name self.age = age @app.get('/user') def get_user(): profile = Profile('abcde', 25) user = User.model_validate(profile) return user

Результат выполнения кода для адреса /user:

{"name": "abcde", "age": 25}

Смотрите также

  • класс BaseModel,
    который является базой для всех моделей Pydantic
  • параметр ConfigDict,
    который задаёт настройки модели
  • метод model_validate,
    который создаёт модель из объекта или словаря
  • метод model_dump,
    который превращает модель в словарь
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить