| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- import json
- from pydantic import BaseModel, field_validator, Field, ConfigDict
- from typing import Optional, Dict, Any
- from datetime import datetime
- class VasSchemaBase(BaseModel):
- name: Optional[str] = None
- description: Optional[str] = None
-
- # 1. 将字段重命名为 schema_content (避免与 BaseModel.schema_json 冲突)
- # 2. 使用 alias="schema_json" 确保前端传参或数据库读取时 key 仍然是 "schema_json"
- schema_content: Optional[Dict[str, Any]] = Field(default=None, alias="schema_json")
- # 配置允许通过字段名或别名进行赋值
- model_config = ConfigDict(populate_by_name=True)
- # 3. 验证器指向新的字段名 schema_content
- @field_validator("schema_content", mode="before")
- def normalize_json_field(cls, v):
- if v is None:
- return None
- if isinstance(v, str):
- try:
- return json.loads(v)
- except Exception:
- return {}
- return v
- class VasSchemaCreate(VasSchemaBase):
- name: str
- description: str
- # 这里也要重命名,并加上 alias
- schema_content: Dict[str, Any] = Field(..., alias="schema_json")
- class VasSchemaUpdate(VasSchemaBase):
- pass
- class VasSchemaOut(VasSchemaBase):
- id: int
- created_at: datetime
- updated_at: datetime
- # 继承 Base 的配置,并在其基础上增加 from_attributes
- model_config = ConfigDict(
- populate_by_name=True,
- from_attributes=True
- )
|