Метод model_copy
Метод model_copy применяется к экземпляру модели
и возвращает её копию. Первым параметром передаётся
словарь update с полями для изменения.
Вторым параметром - флаг deep, который
определяет глубину копирования вложенных объектов.
По умолчанию создаётся поверхностная копия.
Синтаксис
model.model_copy(*, update=None, deep=False)
Пример
Давайте создадим модель User и получим её копию
с изменённым полем name:
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
user = User(name='abcde', age=25)
res = user.model_copy(update={'name': 'article'})
print(res)
Результат выполнения кода:
name='article' age=25
Пример
Давайте получим поверхностную копию без изменений и убедимся, что это разные объекты:
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
user = User(name='abcde', age=25)
res = user.model_copy()
print(res)
print(res is user)
Результат выполнения кода:
name='abcde' age=25
False
Пример
Давайте создадим модель с вложенным объектом и сравним поверхностное и глубокое копирование:
from pydantic import BaseModel
class Address(BaseModel):
city: str
class User(BaseModel):
name: str
address: Address
user = User(name='abcde', address=Address(city='hello'))
shallow = user.model_copy()
deep = user.model_copy(deep=True)
print(shallow.address is user.address)
print(deep.address is user.address)
Результат выполнения кода:
True
False
Пример
Давайте применим метод model_copy внутри
обработчика FastAPI для создания изменённой копии:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
name: str
age: int
@app.get('/user')
def get_user():
user = User(name='abcde', age=25)
res = user.model_copy(update={'age': 30})
return res
Результат выполнения кода для адреса /user:
{"name": "abcde", "age": 30}
Смотрите также
-
класс
BaseModel,
который является базовым классом для всех моделей Pydantic -
метод
model_dump,
который преобразует модель в словарь -
метод
model_dump_json,
который преобразует модель в JSON-строку -
метод
model_validate,
который создаёт модель из словаря или объекта