Pydantic V2 + Django Model 双向序列化与严格校验
使用 Pydantic V2 替代 DRF Serializer,实现从 Model 到 Pydantic Schema 的自动推导以及自定义字段校验链。 · 难度:入门 · +10XP
Pydantic V2 + Django Model 双向序列化与严格校验
DRF 的 Serializer 在类型标注和嵌套校验方面不够灵活。本教程演示如何利用 Pydantic V2 的 model_validator 和 field_validator 构建与 Django Model 1:1 映射的 Schema,覆盖 datetime 时区处理、枚举字段强校验、以及自定义 JSON field。同时提供 from_orm 和 to_orm 的辅助方法,让视图函数中传入的请求数据直接从 Pydantic 模型完成校验并写入数据库。
from pydantic import BaseModel, field_validator
from myapp.models import Product
class ProductSchema(BaseModel):
id: int
name: str
price: float
@field_validator('price')
@classmethod
def must_be_positive(cls, v):
if v <= 0:
raise ValueError('price must > 0')
return v
@classmethod
def from_orm(cls, instance: Product):
return cls(id=instance.id, name=instance.name, price=instance.price)