Атрибут model_fields
Атрибут model_fields доступен у любого класса,
унаследованного от BaseModel.
Он возвращает словарь, ключами которого являются имена полей модели,
а значениями - объекты FieldInfo с метаданными каждого поля:
типом, значением по умолчанию, описанием и другими параметрами.
Атрибут доступен как у самого класса модели,
так и у его экземпляров.
Синтаксис
Model.model_fields
instance.model_fields
Пример
Давайте создадим простую модель и посмотрим на её атрибут model_fields:
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
email: str = 'user@example.com'
print(User.model_fields)
Результат выполнения кода:
{'name': FieldInfo(annotation=str, required=True), 'age': FieldInfo(annotation=int, required=True), 'email': FieldInfo(annotation=str, required=False, default='user@example.com')}
Пример
Давайте переберём поля модели и выведем имя и тип каждого из них:
from pydantic import BaseModel
class Article(BaseModel):
title: str
views: int
published: bool = False
for name, field in Article.model_fields.items():
print(name, field.annotation)
Результат выполнения кода:
title <class 'str'>
views <class 'int'>
published <class 'bool'>
Пример
Давайте получим значение по умолчанию для конкретного поля через model_fields:
Результат выполнения кода:
user
False
Пример
Давайте используем model_fields вместе с FastAPI,
чтобы динамически собрать информацию о теле запроса:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
name: str
age: int
@app.post('/user')
def create_user(user: User):
fields = list(User.model_fields.keys())
return {'fields': fields, 'data': user}
Результат выполнения кода для тела {"name": "abcde", "age": 25}:
{"fields": ["name", "age"], "data": {"name": "abcde", "age": 25}}
Смотрите также
-
класс
BaseModel,
от которого наследуются все модели Pydantic -
метод
model_dump,
который превращает модель в словарь -
атрибут
model_config,
который хранит настройки модели -
функция
Field,
которая задаёт метаданные для поля модели