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

Параметр populate_by_name

Параметр populate_by_name задаётся в классе ConfigDict модели Pydantic и управляет тем, как заполняются поля при создании модели. По умолчанию, если для поля задан псевдоним через Field(alias='...'), то модель принимает данные только по псевдониму. Когда populate_by_name=True, модель принимает данные и по псевдониму, и по имени атрибута. Это удобно при работе с внешними API, где имена полей отличаются от имён атрибутов в коде.

Синтаксис

from pydantic import BaseModel, ConfigDict class Model(BaseModel): model_config = ConfigDict(populate_by_name=True) field: str = Field(alias='alias_name')

Пример

Давайте создадим модель с псевдонимом и включённым populate_by_name:

from fastapi import FastAPI from pydantic import BaseModel, ConfigDict, Field app = FastAPI() class User(BaseModel): model_config = ConfigDict(populate_by_name=True) username: str = Field(alias='user_name') @app.post('/user/') def create_user(user: User): return user

Теперь модель можно заполнить как по псевдониму 'user_name', так и по имени 'username'. Отправим запрос с псевдонимом:

{"user_name": "abcde"}

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

<+python+> {"username": "abcde"} <-python+>

Пример

Теперь отправим запрос с именем атрибута:

{"username": "abcde"}

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

{"username": "abcde"}

Если бы populate_by_name был выключен, второй запрос вернул бы ошибку валидации, так как поле ожидалось только под псевдонимом.

Пример

Давайте посмотрим, как выглядит ошибка при выключенном параметре:

from fastapi import FastAPI from pydantic import BaseModel, ConfigDict, Field app = FastAPI() class User(BaseModel): model_config = ConfigDict(populate_by_name=False) username: str = Field(alias='user_name') @app.post('/user/') def create_user(user: User): return user

Запрос с именем атрибута:

{"username": "abcde"}

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

{"detail": [{"type": "missing", "loc": ["body", "user_name"], "msg": "Field required", "input": {"username": "abcde"}}]}

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

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