Параметр extra
Параметр extra передаётся в словарь model_config
или в класс ConfigDict и определяет, как модель
реагирует на дополнительные поля, которых нет среди
объявленных атрибутов. По умолчанию Pydantic игнорирует
такие поля. Параметр принимает одно из значений:
'allow', 'ignore', 'forbid'.
Значение 'allow' сохраняет лишние поля,
'ignore' отбрасывает их, а 'forbid'
вызывает ошибку валидации.
Синтаксис
from pydantic import BaseModel, ConfigDict
class Model(BaseModel):
model_config = ConfigDict(extra='allow')
Пример
Давайте создадим модель со значением 'allow'
и передадим лишнее поле:
from fastapi import FastAPI
from pydantic import BaseModel, ConfigDict
app = FastAPI()
class User(BaseModel):
model_config = ConfigDict(extra='allow')
name: str
@app.post('/user')
def create_user(user: User):
return user
Результат выполнения кода для тела запроса
{"name": "abcde", "age": 25}:
{"name": "abcde", "age": 25}
Пример
Давайте создадим модель со значением 'ignore'.
Лишнее поле будет молча отброшено:
Результат выполнения кода для тела запроса
{"name": "abcde", "age": 25}:
{"name": "abcde"}
Пример
Давайте создадим модель со значением 'forbid'.
Лишнее поле вызовет ошибку валидации:
from fastapi import FastAPI
from pydantic import BaseModel, ConfigDict
app = FastAPI()
class User(BaseModel):
model_config = ConfigDict(extra='forbid')
name: str
@app.post('/user')
def create_user(user: User):
return user
Результат выполнения кода для тела запроса
{"name": "abcde", "age": 25}:
{
"detail": [
{
"type": "extra_forbidden",
"loc": ["body", "age"],
"msg": "Extra inputs are not permitted",
"input": 25
}
]
}
Смотрите также
-
класс
BaseModel,
который является базой для всех моделей Pydantic -
класс
ConfigDict,
который хранит настройки модели, включая extra -
параметр
from_attributes,
который разрешает создание модели из объекта -
параметр
populate_by_name,
который разрешает заполнение по имени поля