Files
FastapiAdmin/backend/app/api/v1/module_common/file/schema.py
T
zhangtao 73f2823692 refactor: 大规模代码整理与功能优化
1. 重构后端API路由、CRUD与模块结构,整合日志管理,移除废弃demo代码
2. 优化前端组件类型定义、样式与路由配置,修复权限判断逻辑
3. 调整默认排序规则、滚动条样式与工具类函数,更新依赖与配置文件
4. 修复多处类型不匹配与默认值问题,完善表单与菜单验证逻辑
2026-06-17 01:56:31 +08:00

72 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from pydantic import BaseModel, ConfigDict, Field, model_validator
from pydantic.alias_generators import to_camel
class ImportFieldModel(BaseModel):
"""
Excel 导入时单字段映射配置(数据库列、Excel 列、默认值、是否必选等)。
"""
model_config = ConfigDict(alias_generator=to_camel)
base_column: str | None = Field(description="数据库字段名", default=None)
excel_column: str | None = Field(description="excel字段名", default=None)
default_value: str | None = Field(description="默认值", default=None)
is_required: bool | None = Field(description="是否必传", default=None)
selected: bool | None = Field(description="是否勾选", default=None)
@model_validator(mode="before")
@classmethod
def _normalize(cls, data):
if isinstance(data, dict):
for key in ("base_column", "excel_column", "default_value"):
val = data.get(key)
if isinstance(val, str):
val = val.strip()
if val == "":
val = None
data[key] = val
# is_required 兼容转换
val = data.get("is_required")
if isinstance(val, str):
lowered = val.strip().lower()
if lowered in {"true", "1", "y", "yes"}:
data["is_required"] = True
elif lowered in {"false", "0", "n", "no"}:
data["is_required"] = False
return data
@model_validator(mode="after")
def _validate(self):
if self.selected and not (self.base_column and self.base_column.strip()):
raise ValueError("选中字段必须提供数据库字段名")
if self.is_required and not (self.excel_column and self.excel_column.strip()):
raise ValueError("必传字段必须提供excel字段名")
return self
class ImportModel(BaseModel):
"""
Excel 导入请求体:目标表、Sheet、文件名及字段映射列表。
"""
model_config = ConfigDict(alias_generator=to_camel)
table_name: str | None = Field(description="表名", default=None)
sheet_name: str | None = Field(description="Sheet名", default=None)
filed_info: list[ImportFieldModel] | None = Field(description="字段关联表", default=None)
file_name: str | None = Field(description="文件名", default=None)
@model_validator(mode="after")
def _validate(self):
# excel_column 不重复(忽略 None)
if self.filed_info:
seen = set()
for f in self.filed_info:
if f.excel_column:
key = f.excel_column.strip()
if key in seen:
raise ValueError("excel字段名存在重复")
seen.add(key)
return self