Атрибут model_config
Атрибут model_config применяется к классу
модели, наследующему BaseModel, и принимает
словарь с настройками. Через него задаются правила
валидации, сериализации и обработки лишних полей.
Настройки передаются в виде словаря или объекта
ConfigDict.
Синтаксис
class Model(BaseModel):
model_config = ConfigDict(param=value)
Пример
Давайте зададим модели настройку extra
со значением 'forbid', чтобы запретить
передачу лишних полей:
from fastapi import FastAPI
from pydantic import BaseModel, ConfigDict
app = FastAPI()
class User(BaseModel):
model_config = ConfigDict(extra='forbid')
name: str
age: int
@app.post('/user')
def create_user(user: User):
return user
Теперь при передаче лишнего поля FastAPI вернет ошибку валидации:
{
"detail": [
{
"type": "extra_forbidden",
"loc": ["body", "email"],
"msg": "Extra inputs are not permitted",
"input": "abcde"
}
]
}
Пример
Давайте зададим настройку populate_by_name,
чтобы разрешить заполнять поля как по имени, так и
по алиасу:
from fastapi import FastAPI
from pydantic import BaseModel, ConfigDict, Field
app = FastAPI()
class Article(BaseModel):
model_config = ConfigDict(populate_by_name=True)
title: str = Field(alias='article_title')
@app.post('/article')
def create_article(article: Article):
return article
Теперь можно передать поле как по алиасу
'article_title', так и по имени 'title'.
Результат выполнения кода:
{"title": "abcde"}
Пример
Давайте зададим настройку frozen,
чтобы сделать модель неизменяемой:
from fastapi import FastAPI
from pydantic import BaseModel, ConfigDict
app = FastAPI()
class User(BaseModel):
model_config = ConfigDict(frozen=True)
name: str
age: int
@app.post('/user')
def create_user(user: User):
return user
При попытке изменить поле такого объекта возникнет ошибка. Результат выполнения кода:
ValidationError: Instance is frozen
Смотрите также
-
класс
BaseModel,
от которого наследуются все Pydantic-модели -
класс
ConfigDict,
который хранит настройки конфигурации модели -
атрибут
model_fields,
который содержит информацию о полях модели -
параметр
extra,
который управляет обработкой лишних полей